aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorSimon Quigley <tsimonq2@ubuntu.com>2017-08-16 04:32:39 -0500
committerSimon Quigley <tsimonq2@ubuntu.com>2017-08-16 04:32:39 -0500
commit82306ca849c0710209e5a39754f446d0335a276d (patch)
tree8d297400e5c36357b9147401631e653e035283d3 /shell
parent21a53faf18b01a65a341115000e97d70b37c750c (diff)
parent9a9db98089717990cd5e0eef529f6bb0819ebe46 (diff)
Updated version 0.5.1+git20170815 from 'upstream/0.5.1+git20170815'
with Debian dir 36bf8e7e43d9f6621a63c79a597af2f4f76271b7
Diffstat (limited to 'shell')
-rw-r--r--shell/callbacks.c112
-rw-r--r--shell/loadgraph-uber.c127
-rw-r--r--shell/loadgraph.c183
-rw-r--r--shell/menu.c13
-rw-r--r--shell/report.c117
-rw-r--r--shell/shell.c314
-rw-r--r--shell/syncmanager.c45
7 files changed, 586 insertions, 325 deletions
diff --git a/shell/callbacks.c b/shell/callbacks.c
index d5ac34da..95a7bd61 100644
--- a/shell/callbacks.c
+++ b/shell/callbacks.c
@@ -37,42 +37,6 @@ void cb_sync_manager()
sync_manager_show(shell->window);
}
-void cb_save_graphic()
-{
- Shell *shell = shell_get_main_shell();
- GtkWidget *dialog;
- gchar *filename;
-
- /* save the pixbuf to a png file */
- dialog = gtk_file_chooser_dialog_new(_("Save Image"),
- NULL,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE,
- GTK_RESPONSE_ACCEPT, NULL);
-
- filename = g_strconcat(shell->selected->name, ".png", NULL);
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), filename);
- g_free(filename);
-
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- gtk_widget_destroy(dialog);
-
- shell_status_update(_("Saving image..."));
-
- tree_view_save_image(filename);
-
- shell_status_update(_("Done."));
- g_free(filename);
-
- return;
- }
-
- gtk_widget_destroy(dialog);
-}
-
void cb_open_web_page()
{
open_url("http://www.hardinfo.org");
@@ -148,8 +112,14 @@ void cb_about_module(GtkAction * action)
about = gtk_about_dialog_new();
+ gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(shell->window));
+
text = g_strdup_printf(_("%s Module"), sm->name);
+#if GTK_CHECK_VERSION(2, 12, 0)
+ gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about), text);
+#else
gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(about), text);
+#endif
g_free(text);
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about),
@@ -181,41 +151,51 @@ void cb_about_module(GtkAction * action)
void cb_about()
{
+ Shell *shell = shell_get_main_shell();
GtkWidget *about;
+ gchar *copyright = NULL;
const gchar *authors[] = {
- _("Author:"),
- "Leandro A. F. Pereira",
- "",
- _("Contributors:"),
- "Agney Lopes Roth Ferraz",
- "Andrey Esin",
- "",
- _("Based on work by:"),
- _("MD5 implementation by Colin Plumb (see md5.c for details)"),
- _("SHA1 implementation by Steve Reid (see sha1.c for details)"),
- _("Blowfish implementation by Paul Kocher (see blowfich.c for details)"),
- _("Raytracing benchmark by John Walker (see fbench.c for details)"),
- _("FFT benchmark by Scott Robert Ladd (see fftbench.c for details)"),
- _("Some code partly based on x86cpucaps by Osamu Kayasono"),
- _("Vendor list based on GtkSysInfo by Pissens Sebastien"),
- _("DMI support based on code by Stewart Adam"),
- _("SCSI support based on code by Pascal F. Martin"),
- NULL
+ _("Author:"),
+ "Leandro A. F. Pereira",
+ "",
+ _("Contributors:"),
+ "Agney Lopes Roth Ferraz",
+ "Andrey Esin",
+ "Burt P.",
+ "",
+ _("Based on work by:"),
+ _("MD5 implementation by Colin Plumb (see md5.c for details)"),
+ _("SHA1 implementation by Steve Reid (see sha1.c for details)"),
+ _("Blowfish implementation by Paul Kocher (see blowfich.c for details)"),
+ _("Raytracing benchmark by John Walker (see fbench.c for details)"),
+ _("FFT benchmark by Scott Robert Ladd (see fftbench.c for details)"),
+ _("Some code partly based on x86cpucaps by Osamu Kayasono"),
+ _("Vendor list based on GtkSysInfo by Pissens Sebastien"),
+ _("DMI support based on code by Stewart Adam"),
+ _("SCSI support based on code by Pascal F. Martin"),
+ NULL
};
const gchar *artists[] = {
- _("Jakub Szypulka"),
- _("Tango Project"),
- _("The GNOME Project"),
- _("VMWare, Inc. (USB icon from VMWare Workstation 6)"),
- NULL
+ "Jakub Szypulka",
+ _("Tango Project"),
+ _("The GNOME Project"),
+ _("VMWare, Inc. (USB icon from VMWare Workstation 6)"),
+ NULL
};
about = gtk_about_dialog_new();
+ gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(shell->window));
+
+#if GTK_CHECK_VERSION(2, 12, 0)
+ gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about), "HardInfo");
+#else
gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(about), "HardInfo");
+#endif
+
+ copyright = g_strdup_printf("Copyright \302\251 2003-%d Leandro A. F. Pereira", HARDINFO_COPYRIGHT_LATEST_YEAR);
+
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about), VERSION);
- gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(about),
- "Copyright \302\251 2003-2016 "
- "Leandro A. F. Pereira");
+ gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(about), copyright);
gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about),
_("System information and benchmark tool"));
gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(about),
@@ -232,15 +212,17 @@ void cb_about()
"You should have received a copy of the GNU General Public License "
"along with this program; if not, write to the Free Software "
"Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA"));
-#if GTK_CHECK_VERSION(2,8,0)
gtk_about_dialog_set_wrap_license(GTK_ABOUT_DIALOG(about), TRUE);
-#endif
gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(about), authors);
gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(about), artists);
+ gtk_about_dialog_set_translator_credits(GTK_ABOUT_DIALOG(about),
+ _("translator-credits"));
gtk_dialog_run(GTK_DIALOG(about));
gtk_widget_destroy(about);
+
+ g_free(copyright);
}
void cb_generate_report()
@@ -260,6 +242,6 @@ void cb_quit(void)
do {
gtk_main_quit();
} while (gtk_main_level() > 1);
-
+
exit(0);
}
diff --git a/shell/loadgraph-uber.c b/shell/loadgraph-uber.c
new file mode 100644
index 00000000..61964b37
--- /dev/null
+++ b/shell/loadgraph-uber.c
@@ -0,0 +1,127 @@
+/*
+ * Christian Hergert's uber-graph (GPL3)
+ * wrapped in an interface compatible with
+ * Leandro A. F. Pereira's loadgraph (GPL2.1).
+ */
+
+#include <string.h>
+#include "loadgraph.h"
+#include "uber.h"
+
+#define LG_MAX_LINES 9
+
+static const gchar *default_colors[] = { "#73d216",
+ "#f57900",
+ /*colors from simple.c sample */ "#3465a4",
+ "#ef2929",
+ "#75507b",
+ "#ce5c00",
+ "#c17d11",
+ "#ce5c00",
+ "#729fcf",
+ NULL };
+
+struct _LoadGraph {
+ GtkWidget *uber_widget;
+ gdouble cur_value[LG_MAX_LINES];
+ gint height;
+};
+
+gdouble
+_sample_func (UberLineGraph *graph,
+ guint line,
+ gpointer user_data)
+{
+ LoadGraph *lg = (LoadGraph *)user_data;
+ return lg->cur_value[line-1];
+}
+
+LoadGraph *load_graph_new(gint size)
+{
+ LoadGraph *lg;
+ GdkRGBA color;
+ int i = 0;
+
+ lg = g_new0(LoadGraph, 1);
+ lg->uber_widget = uber_line_graph_new();
+ lg->height = (size+1) * 2; /* idk */
+ for (i = 0; i < LG_MAX_LINES; i++) {
+ lg->cur_value[i] = UBER_LINE_GRAPH_NO_VALUE;
+ //GtkWidget *label = uber_label_new();
+ //uber_label_set_text(UBER_LABEL(label), "BLAH!");
+ gdk_rgba_parse(&color, default_colors[i]);
+ uber_line_graph_add_line(UBER_LINE_GRAPH(lg->uber_widget), &color, NULL); /* UBER_LABEL(label) */
+ }
+ uber_line_graph_set_autoscale(UBER_LINE_GRAPH(lg->uber_widget), TRUE);
+ uber_line_graph_set_data_func(UBER_LINE_GRAPH(lg->uber_widget),
+ (UberLineGraphFunc)_sample_func, (gpointer *)lg, NULL);
+ return lg;
+}
+
+void load_graph_set_data_suffix(LoadGraph * lg, gchar * suffix)
+{
+
+}
+
+gchar *load_graph_get_data_suffix(LoadGraph * lg)
+{
+ return strdup("");
+}
+
+GtkWidget *load_graph_get_framed(LoadGraph * lg)
+{
+ if (lg != NULL)
+ return lg->uber_widget;
+ return NULL;
+}
+
+void load_graph_clear(LoadGraph * lg)
+{
+ int i;
+ if (lg != NULL) {
+ for (i = 0; i < LG_MAX_LINES; i++) {
+ lg->cur_value[i] = UBER_LINE_GRAPH_NO_VALUE;
+ }
+ uber_graph_scale_changed(lg->uber_widget);
+ }
+}
+
+void load_graph_set_color(LoadGraph * lg, LoadGraphColor color)
+{
+
+}
+
+void load_graph_destroy(LoadGraph * lg)
+{
+ if (lg != NULL) {
+ g_object_unref(lg->uber_widget);
+ g_free(lg);
+ }
+}
+
+static gboolean _expose(GtkWidget * widget, GdkEventExpose * event, gpointer user_data)
+{
+ return TRUE;
+}
+
+void load_graph_configure_expose(LoadGraph * lg)
+{
+
+}
+
+void load_graph_update_ex(LoadGraph *lg, guint line, gdouble value)
+{
+ if (lg != NULL && line < LG_MAX_LINES)
+ lg->cur_value[line] = value;
+}
+
+void load_graph_update(LoadGraph * lg, gdouble value)
+{
+ load_graph_update_ex(lg, 0, value);
+}
+
+gint load_graph_get_height(LoadGraph *lg) {
+ if (lg != NULL)
+ return lg->height;
+ return 0;
+}
diff --git a/shell/loadgraph.c b/shell/loadgraph.c
index 8fbeef48..ceb91720 100644
--- a/shell/loadgraph.c
+++ b/shell/loadgraph.c
@@ -20,11 +20,31 @@
* You should have received a copy of the GNU Lesser General Public
* License along with the Simple Load Graph; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- * 02111-1307 USA.
+ * 02111-1307 USA.
*/
#include "loadgraph.h"
+struct _LoadGraph {
+ GdkPixmap *buf;
+ GdkGC *grid;
+ GdkGC *trace;
+ GdkGC *fill;
+ GtkWidget *area;
+
+ gint *data;
+ gfloat scale;
+
+ gint size;
+ gint width, height;
+ LoadGraphColor color;
+
+ gint max_value, remax_count;
+
+ PangoLayout *layout;
+ gchar *suffix;
+};
+
static void _draw(LoadGraph * lg);
LoadGraph *load_graph_new(gint size)
@@ -89,7 +109,7 @@ void load_graph_clear(LoadGraph * lg)
gint i;
for (i = 0; i < lg->size; i++)
- lg->data[i] = 0;
+ lg->data[i] = 0;
lg->scale = 1.0;
lg->max_value = 1;
@@ -119,14 +139,14 @@ void load_graph_destroy(LoadGraph * lg)
}
static gboolean _expose(GtkWidget * widget, GdkEventExpose * event,
- gpointer user_data)
+ gpointer user_data)
{
LoadGraph *lg = (LoadGraph *) user_data;
GdkDrawable *draw = GDK_DRAWABLE(lg->buf);
gdk_draw_drawable(lg->area->window,
- lg->area->style->black_gc,
- draw, 0, 0, 0, 0, lg->width, lg->height);
+ lg->area->style->black_gc,
+ draw, 0, 0, 0, 0, lg->width, lg->height);
return FALSE;
}
@@ -146,27 +166,17 @@ void load_graph_configure_expose(LoadGraph * lg)
/* init graphic contexts */
gdk_gc_set_line_attributes(lg->grid,
- 1, GDK_LINE_ON_OFF_DASH,
- GDK_CAP_NOT_LAST, GDK_JOIN_ROUND);
+ 1, GDK_LINE_ON_OFF_DASH,
+ GDK_CAP_NOT_LAST, GDK_JOIN_ROUND);
gdk_gc_set_dashes(lg->grid, 0, (gint8*)"\2\2", 2);
-
-#if 0 /* old-style grid */
- gdk_rgb_gc_set_foreground(lg->grid, 0x707070);
-#endif
gdk_gc_set_line_attributes(lg->trace,
- 1, GDK_LINE_SOLID,
- GDK_CAP_PROJECTING, GDK_JOIN_ROUND);
-
-#if 0 /* old-style fill */
- gdk_gc_set_line_attributes(lg->fill,
- 1, GDK_LINE_SOLID,
- GDK_CAP_BUTT, GDK_JOIN_BEVEL);
-#endif
+ 1, GDK_LINE_SOLID,
+ GDK_CAP_PROJECTING, GDK_JOIN_ROUND);
/* configures the expose event */
g_signal_connect(G_OBJECT(lg->area), "expose-event",
- (GCallback) _expose, lg);
+ (GCallback) _expose, lg);
}
static void _draw_label_and_line(LoadGraph * lg, gint position, gint value)
@@ -175,21 +185,21 @@ static void _draw_label_and_line(LoadGraph * lg, gint position, gint value)
/* draw lines */
if (position > 0)
- gdk_draw_line(GDK_DRAWABLE(lg->buf), lg->grid, 0, position,
- lg->width, position);
+ gdk_draw_line(GDK_DRAWABLE(lg->buf), lg->grid, 0, position,
+ lg->width, position);
else
- position = -1 * position;
+ position = -1 * position;
/* draw label */
tmp =
- g_strdup_printf("<span size=\"x-small\">%d%s</span>", value,
- lg->suffix);
+ g_strdup_printf("<span size=\"x-small\">%d%s</span>", value,
+ lg->suffix);
pango_layout_set_markup(lg->layout, tmp, -1);
pango_layout_set_width(lg->layout,
- lg->area->allocation.width * PANGO_SCALE);
+ lg->area->allocation.width * PANGO_SCALE);
gdk_draw_layout(GDK_DRAWABLE(lg->buf), lg->trace, 2, position,
- lg->layout);
+ lg->layout);
g_free(tmp);
}
@@ -201,15 +211,15 @@ static void _draw(LoadGraph * lg)
/* clears the drawing area */
gdk_draw_rectangle(draw, lg->area->style->black_gc,
- TRUE, 0, 0, lg->width, lg->height);
+ TRUE, 0, 0, lg->width, lg->height);
/* the graph */
GdkPoint *points = g_new0(GdkPoint, lg->size + 1);
for (i = 0; i < lg->size; i++) {
- points[i].x = i * 4;
- points[i].y = lg->height - lg->data[i] * lg->scale;
+ points[i].x = i * 4;
+ points[i].y = lg->height - lg->data[i] * lg->scale;
}
points[0].x = points[1].x = 0;
@@ -223,8 +233,8 @@ static void _draw(LoadGraph * lg)
/* vertical bars */
for (i = lg->width, d = 0; i > 1; i--, d++)
- if ((d % 45) == 0 && d)
- gdk_draw_line(draw, lg->grid, i, 0, i, lg->height);
+ if ((d % 45) == 0 && d)
+ gdk_draw_line(draw, lg->grid, i, 0, i, lg->height);
/* horizontal bars and labels; 25%, 50% and 75% */
_draw_label_and_line(lg, -1, lg->max_value);
@@ -232,41 +242,27 @@ static void _draw(LoadGraph * lg)
_draw_label_and_line(lg, lg->height / 2, lg->max_value / 2);
_draw_label_and_line(lg, 3 * (lg->height / 4), lg->max_value / 4);
-#if 0 /* old-style drawing */
- for (i = 0; i < lg->size; i++) {
- gint this = lg->height - lg->data[i] * lg->scale;
- gint next = lg->height - lg->data[i + 1] * lg->scale;
- gint i4 = i * 4;
-
- gdk_draw_line(draw, lg->fill, i4, this, i4, lg->height);
- gdk_draw_line(draw, lg->fill, i4 + 2, this, i4 + 2, lg->height);
- }
-
- for (i = 0; i < lg->size; i++) {
- gint this = lg->height - lg->data[i] * lg->scale;
- gint next = lg->height - lg->data[i + 1] * lg->scale;
- gint i4 = i * 4;
-
- gdk_draw_line(draw, lg->trace, i4, this, i4 + 2,
- (this + next) / 2);
- gdk_draw_line(draw, lg->trace, i4 + 2, (this + next) / 2,
- i4 + 4, next);
- }
-#endif
-
gtk_widget_queue_draw(lg->area);
}
-void load_graph_update(LoadGraph * lg, gint value)
+void load_graph_update_ex(LoadGraph *lg, guint line, gdouble value)
+{
+ /* not implemented */
+ if (line == 0)
+ load_graph_update(lg, value);
+}
+
+void load_graph_update(LoadGraph * lg, gdouble v)
{
gint i;
+ gint value = (gint)v;
if (value < 0)
- return;
+ return;
/* shift-right our data */
for (i = 0; i < lg->size - 1; i++) {
- lg->data[i] = lg->data[i + 1];
+ lg->data[i] = lg->data[i + 1];
}
/* insert the updated value */
@@ -274,20 +270,20 @@ void load_graph_update(LoadGraph * lg, gint value)
/* calculates the maximum value */
if (lg->remax_count++ > 20) {
- /* only finds the maximum amongst the data every 20 times */
- lg->remax_count = 0;
+ /* only finds the maximum amongst the data every 20 times */
+ lg->remax_count = 0;
- gint max = lg->data[0];
- for (i = 1; i < lg->size; i++) {
- if (lg->data[i] > max)
- max = lg->data[i];
- }
+ gint max = lg->data[0];
+ for (i = 1; i < lg->size; i++) {
+ if (lg->data[i] > max)
+ max = lg->data[i];
+ }
- lg->max_value = max;
+ lg->max_value = max;
} else {
- /* otherwise, select the maximum between the current maximum
- and the supplied value */
- lg->max_value = MAX(value, lg->max_value);
+ /* otherwise, select the maximum between the current maximum
+ and the supplied value */
+ lg->max_value = MAX(value, lg->max_value);
}
/* recalculates the scale; always use 90% of it */
@@ -297,53 +293,8 @@ void load_graph_update(LoadGraph * lg, gint value)
_draw(lg);
}
-#ifdef LOADGRAPH_UNIT_TEST
-gboolean lg_update(gpointer d)
-{
- LoadGraph *lg = (LoadGraph *) d;
-
- static int i = 0;
- static int j = 1;
-
- if (i > 150) {
- j = -1;
- } else if (i < 0) {
- j = 1;
- }
-
- i += j;
- if (rand() % 10 > 8)
- i *= 2;
- if (rand() % 10 < 2)
- i /= 2;
- load_graph_update(lg, i + rand() % 50);
-
- return TRUE;
-}
-
-int main(int argc, char **argv)
-{
-
-
- LoadGraph *lg;
- GtkWidget *window;
-
- gtk_init(&argc, &argv);
-
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_widget_show(window);
-
- lg = load_graph_new(50);
- gtk_container_add(GTK_CONTAINER(window), load_graph_get_framed(lg));
- gtk_container_set_border_width(GTK_CONTAINER(window), 20);
- load_graph_configure_expose(lg);
-
- lg_update(lg);
-
- g_timeout_add(100, lg_update, lg);
-
- gtk_main();
-
+gint load_graph_get_height(LoadGraph *lg) {
+ if (lg != NULL)
+ return lg->height;
return 0;
}
-#endif
diff --git a/shell/menu.c b/shell/menu.c
index f5724d31..e966f485 100644
--- a/shell/menu.c
+++ b/shell/menu.c
@@ -53,17 +53,12 @@ static GtkActionEntry entries[] = {
N_("_Open..."), NULL,
NULL,
G_CALLBACK(cb_sync_manager)},
-
+
{"CopyAction", GTK_STOCK_COPY,
N_("_Copy to Clipboard"), "<control>C",
N_("Copy to clipboard"),
G_CALLBACK(cb_copy_to_clipboard)},
- {"SaveGraphAction", GTK_STOCK_SAVE_AS,
- N_("_Save image as..."), "<control>S",
- NULL,
- G_CALLBACK(cb_save_graphic)},
-
{"RefreshAction", GTK_STOCK_REFRESH,
N_("_Refresh"), "F5",
NULL,
@@ -130,15 +125,15 @@ void menu_init(Shell * shell)
/* Pack up our objects:
* menu_box -> window
* actions -> action_group
- * action_group -> menu_manager */
- gtk_action_group_set_translation_domain( action_group, "hardinfo" );//gettext
+ * action_group -> menu_manager */
+ gtk_action_group_set_translation_domain( action_group, "hardinfo" );//gettext
gtk_action_group_add_actions(action_group, entries,
G_N_ELEMENTS(entries), NULL);
gtk_action_group_add_toggle_actions(action_group, toggle_entries,
G_N_ELEMENTS(toggle_entries),
NULL);
gtk_ui_manager_insert_action_group(menu_manager, action_group, 0);
-
+
/* Read in the UI from our XML file */
error = NULL;
diff --git a/shell/report.c b/shell/report.c
index 3b5d3bdb..398af323 100644
--- a/shell/report.c
+++ b/shell/report.c
@@ -67,7 +67,7 @@ void report_key_value(ReportContext * ctx, gchar * key, gchar * value)
gint report_get_visible_columns(ReportContext *ctx)
{
gint columns;
-
+
/* Column count starts at two, since we always have at least
two columns visible. */
columns = 2;
@@ -77,10 +77,10 @@ gint report_get_visible_columns(ReportContext *ctx)
if (ctx->columns & REPORT_COL_EXTRA1)
columns++;
-
+
if (ctx->columns & REPORT_COL_EXTRA2)
columns++;
-
+
return columns;
}
@@ -88,7 +88,7 @@ void report_context_configure(ReportContext * ctx, GKeyFile * keyfile)
{
gchar **keys;
const gchar *group = "$ShellParam$";
-
+
/* FIXME: sometime in the future we'll save images in the report. this
flag will be set if we should support that.
@@ -100,19 +100,19 @@ void report_context_configure(ReportContext * ctx, GKeyFile * keyfile)
"ViewType",
NULL) == SHELL_VIEW_PROGRESS);
-
+
keys = g_key_file_get_keys(keyfile, group, NULL, NULL);
if (keys) {
gint i = 0;
-
+
for (; keys[i]; i++) {
gchar *key = keys[i];
-
+
if (g_str_equal(key, "ShowColumnHeaders")) {
ctx->show_column_headers = g_key_file_get_boolean(keyfile, group, key, NULL);
} else if (g_str_has_prefix(key, "ColumnTitle")) {
gchar *value, *title = strchr(key, '$');
-
+
if (!title) {
DEBUG("couldn't find column title");
break;
@@ -135,20 +135,20 @@ void report_context_configure(ReportContext * ctx, GKeyFile * keyfile)
} else if (g_str_equal(title, "Progress")) {
ctx->columns |= REPORT_COL_PROGRESS;
}
-
+
g_hash_table_replace(ctx->column_titles,
g_strdup(title), g_strdup(value));
} else if (g_str_equal(key, "ViewType")) {
if (g_key_file_get_integer(keyfile, group, "ViewType", NULL) == SHELL_VIEW_PROGRESS) {
ctx->columns &= ~REPORT_COL_VALUE;
ctx->columns |= REPORT_COL_PROGRESS;
- }
+ }
}
}
- g_strfreev(keys);
+ g_strfreev(keys);
}
-
+
}
void report_table(ReportContext * ctx, gchar * text)
@@ -164,7 +164,7 @@ void report_table(ReportContext * ctx, gchar * text)
/**/
g_key_file_load_from_data(key_file, text, strlen(text), 0, NULL);
groups = g_key_file_get_groups(key_file, NULL);
-
+
for (i = 0; groups[i]; i++) {
if (groups[i][0] == '$') {
report_context_configure(ctx, key_file);
@@ -209,7 +209,7 @@ void report_table(ReportContext * ctx, gchar * text)
value = g_strdup("...");
}
}
-
+
if (*key == '$') {
report_key_value(ctx, strchr(key + 1, '$') + 1,
value);
@@ -301,7 +301,7 @@ report_html_key_value(ReportContext * ctx, gchar * key, gchar * value)
gint columns = report_get_visible_columns(ctx);
gchar **values;
gint i;
-
+
if (columns == 2) {
ctx->output = h_strdup_cprintf("<tr><td class=\"field\">%s</td>"
"<td class=\"value\">%s</td></tr>\n",
@@ -309,9 +309,9 @@ report_html_key_value(ReportContext * ctx, gchar * key, gchar * value)
key, value);
} else {
values = g_strsplit(value, "|", columns);
-
+
ctx->output = h_strdup_cprintf("\n<tr>\n<td class=\"field\">%s</td>", ctx->output, key);
-
+
for (i = columns - 2; i >= 0; i--) {
ctx->output = h_strdup_cprintf("<td class=\"value\">%s</td>",
ctx->output,
@@ -319,7 +319,7 @@ report_html_key_value(ReportContext * ctx, gchar * key, gchar * value)
}
ctx->output = h_strdup_cprintf("</tr>\n", ctx->output);
-
+
g_strfreev(values);
}
}
@@ -372,7 +372,7 @@ report_text_key_value(ReportContext * ctx, gchar * key, gchar * value)
gint columns = report_get_visible_columns(ctx);
gchar **values;
gint i;
-
+
if (columns == 2) {
if (strlen(value))
ctx->output = h_strdup_cprintf("%s\t\t: %s\n", ctx->output, key, value);
@@ -380,9 +380,9 @@ report_text_key_value(ReportContext * ctx, gchar * key, gchar * value)
ctx->output = h_strdup_cprintf("%s\n", ctx->output, key);
} else {
values = g_strsplit(value, "|", columns);
-
+
ctx->output = h_strdup_cprintf("%s\t", ctx->output, key);
-
+
for (i = columns - 2; i >= 0; i--) {
ctx->output = h_strdup_cprintf("%s\t",
ctx->output,
@@ -390,7 +390,7 @@ report_text_key_value(ReportContext * ctx, gchar * key, gchar * value)
}
ctx->output = h_strdup_cprintf("\n", ctx->output);
-
+
g_strfreev(values);
}
}
@@ -490,6 +490,15 @@ static gchar *report_get_filename(void)
GtkWidget *dialog;
gchar *filename = NULL;
+#if GTK_CHECK_VERSION(3, 0, 0)
+ dialog = gtk_file_chooser_dialog_new(_("Save File"),
+ NULL,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ "_Cancel",
+ GTK_RESPONSE_CANCEL,
+ "_Save",
+ GTK_RESPONSE_ACCEPT, NULL);
+#else
dialog = gtk_file_chooser_dialog_new(_("Save File"),
NULL,
GTK_FILE_CHOOSER_ACTION_SAVE,
@@ -497,6 +506,7 @@ static gchar *report_get_filename(void)
GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE,
GTK_RESPONSE_ACCEPT, NULL);
+#endif
gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog),
"hardinfo_report");
@@ -548,7 +558,7 @@ ReportContext *report_context_text_new()
ctx->output = g_strdup("");
ctx->format = REPORT_FORMAT_TEXT;
-
+
ctx->column_titles = g_hash_table_new_full(g_str_hash, g_str_equal,
g_free, g_free);
ctx->first_table = TRUE;
@@ -636,15 +646,21 @@ static gboolean report_generate(ReportDialog * rd)
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
_("Open the report with your web browser?"));
+#if GTK_CHECK_VERSION(3, 0, 0)
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ "_No", GTK_RESPONSE_REJECT,
+ "_Open", GTK_RESPONSE_ACCEPT, NULL);
+#else
gtk_dialog_add_buttons(GTK_DIALOG(dialog),
GTK_STOCK_NO, GTK_RESPONSE_REJECT,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
+#endif
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
gchar *temp;
-
+
temp = g_strdup_printf("file://%s", file);
open_url(temp);
-
+
g_free(temp);
}
@@ -744,7 +760,7 @@ report_dialog_sel_toggle(GtkCellRendererToggle * cellrenderertoggle,
if (active) {
GtkTreeIter parent;
-
+
if (gtk_tree_model_iter_parent(model, &parent, &iter)) {
gtk_tree_store_set(GTK_TREE_STORE(model), &parent,
TREE_COL_SEL, active, -1);
@@ -786,12 +802,20 @@ static ReportDialog
gtk_window_set_type_hint(GTK_WINDOW(dialog),
GDK_WINDOW_TYPE_HINT_DIALOG);
+#if GTK_CHECK_VERSION(2, 14, 0)
+ dialog1_vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
+#else
dialog1_vbox = GTK_DIALOG(dialog)->vbox;
+#endif
gtk_box_set_spacing(GTK_BOX(dialog1_vbox), 5);
gtk_container_set_border_width(GTK_CONTAINER(dialog1_vbox), 4);
gtk_widget_show(dialog1_vbox);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+#else
hbox = gtk_hbox_new(FALSE, 5);
+#endif
gtk_box_pack_start(GTK_BOX(dialog1_vbox), hbox, FALSE, FALSE, 0);
label = gtk_label_new(_("<big><b>Generate Report</b></big>\n"
@@ -799,15 +823,23 @@ static ReportDialog
"to view in your report:"));
gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ gtk_widget_set_valign(label, GTK_ALIGN_CENTER);
+#else
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+#endif
gtk_box_pack_start(GTK_BOX(hbox),
icon_cache_get_image("report-large.png"),
FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0);
gtk_widget_show_all(hbox);
-
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+#else
hbox = gtk_hbox_new(FALSE, 5);
+#endif
gtk_box_pack_start(GTK_BOX(dialog1_vbox), hbox, TRUE, TRUE, 0);
gtk_widget_show(hbox);
@@ -847,7 +879,11 @@ static ReportDialog
gtk_tree_view_column_add_attribute(column, cr_text, "markup",
TREE_COL_NAME);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ vbuttonbox3 = gtk_button_box_new(GTK_ORIENTATION_VERTICAL);
+#else
vbuttonbox3 = gtk_vbutton_box_new();
+#endif
gtk_widget_show(vbuttonbox3);
gtk_box_pack_start(GTK_BOX(hbox), vbuttonbox3, FALSE, TRUE, 0);
gtk_box_set_spacing(GTK_BOX(vbuttonbox3), 5);
@@ -857,33 +893,58 @@ static ReportDialog
button3 = gtk_button_new_with_mnemonic(_("Select _None"));
gtk_widget_show(button3);
gtk_container_add(GTK_CONTAINER(vbuttonbox3), button3);
+#if GTK_CHECK_VERSION(2, 18, 0)
+ gtk_widget_set_can_default(button3, TRUE);
+#else
GTK_WIDGET_SET_FLAGS(button3, GTK_CAN_DEFAULT);
+#endif
g_signal_connect(button3, "clicked",
G_CALLBACK(report_dialog_sel_none), rd);
button6 = gtk_button_new_with_mnemonic(_("Select _All"));
gtk_widget_show(button6);
gtk_container_add(GTK_CONTAINER(vbuttonbox3), button6);
+#if GTK_CHECK_VERSION(2, 18, 0)
+ gtk_widget_set_can_default(button6, TRUE);
+#else
GTK_WIDGET_SET_FLAGS(button6, GTK_CAN_DEFAULT);
+#endif
g_signal_connect(button6, "clicked", G_CALLBACK(report_dialog_sel_all),
rd);
+#if GTK_CHECK_VERSION(2, 14, 0)
+/* TODO:GTK3
+ * [https://developer.gnome.org/gtk3/stable/GtkDialog.html#gtk-dialog-get-action-area]
+ * gtk_dialog_get_action_area has been deprecated since version 3.12 and should not be used in newly-written code.
+ * Direct access to the action area is discouraged; use gtk_dialog_add_button(), etc.
+ */
+ dialog1_action_area = gtk_dialog_get_action_area(GTK_DIALOG(dialog));
+#else
dialog1_action_area = GTK_DIALOG(dialog)->action_area;
+#endif
gtk_widget_show(dialog1_action_area);
gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog1_action_area),
GTK_BUTTONBOX_END);
- button8 = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ button8 = gtk_button_new_with_mnemonic(_("_Cancel"));
gtk_widget_show(button8);
gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button8,
GTK_RESPONSE_CANCEL);
+#if GTK_CHECK_VERSION(2, 18, 0)
+ gtk_widget_set_can_default(button8, TRUE);
+#else
GTK_WIDGET_SET_FLAGS(button8, GTK_CAN_DEFAULT);
+#endif
button7 = gtk_button_new_with_mnemonic(_("_Generate"));
gtk_widget_show(button7);
gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button7,
GTK_RESPONSE_ACCEPT);
+#if GTK_CHECK_VERSION(2, 18, 0)
+ gtk_widget_set_can_default(button7, TRUE);
+#else
GTK_WIDGET_SET_FLAGS(button7, GTK_CAN_DEFAULT);
+#endif
rd->dialog = dialog;
rd->btn_cancel = button8;
diff --git a/shell/shell.c b/shell/shell.c
index bf866e84..b81e77b6 100644
--- a/shell/shell.c
+++ b/shell/shell.c
@@ -284,9 +284,7 @@ void shell_view_set_enabled(gboolean setting)
shell_action_set_enabled("CopyAction", setting);
shell_action_set_enabled("ReportAction", setting);
shell_action_set_enabled("SyncManagerAction", setting && sync_manager_count_entries() > 0);
- shell_action_set_enabled("SaveGraphAction",
- setting ? shell->view_type ==
- SHELL_VIEW_PROGRESS : FALSE);
+
}
void shell_status_set_enabled(gboolean setting)
@@ -358,14 +356,18 @@ static ShellNote *note_new(void)
note->label = gtk_label_new("");
note->event_box = gtk_event_box_new();
button = gtk_button_new();
-
+
border_box = gtk_event_box_new();
gtk_container_set_border_width(GTK_CONTAINER(border_box), 1);
gtk_container_add(GTK_CONTAINER(note->event_box), border_box);
gtk_widget_show(border_box);
-
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+ /* TODO:GTK3 css-based style */
+#else
gtk_widget_modify_bg(border_box, GTK_STATE_NORMAL, &info_default_fill_color);
gtk_widget_modify_bg(note->event_box, GTK_STATE_NORMAL, &info_default_border_color);
+#endif
icon = icon_cache_get_image("close.png");
gtk_widget_show(icon);
@@ -374,7 +376,11 @@ static ShellNote *note_new(void)
g_signal_connect(G_OBJECT(button), "clicked", (GCallback) close_note,
NULL);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
+#else
hbox = gtk_hbox_new(FALSE, 3);
+#endif
icon = icon_cache_get_image("dialog-information.png");
gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, FALSE, 0);
@@ -395,7 +401,7 @@ void shell_set_title(Shell *shell, gchar *subtitle)
tmp = g_strdup_printf(_("%s - System Information"), subtitle);
gtk_window_set_title(GTK_WINDOW(shell->window), tmp);
-
+
g_free(tmp);
} else {
gtk_window_set_title(GTK_WINDOW(shell->window), _("System Information"));
@@ -415,14 +421,22 @@ static void create_window(void)
gtk_window_set_default_size(GTK_WINDOW(shell->window), 800, 600);
g_signal_connect(G_OBJECT(shell->window), "destroy", destroy_me, NULL);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+#else
vbox = gtk_vbox_new(FALSE, 0);
+#endif
gtk_widget_show(vbox);
gtk_container_add(GTK_CONTAINER(shell->window), vbox);
shell->vbox = vbox;
menu_init(shell);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+#else
hbox = gtk_hbox_new(FALSE, 5);
+#endif
gtk_widget_show(hbox);
gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 3);
@@ -432,23 +446,39 @@ static void create_window(void)
gtk_box_pack_end(GTK_BOX(hbox), shell->progress, FALSE, FALSE, 5);
shell->status = gtk_label_new("");
+#if GTK_CHECK_VERSION(3, 0, 0)
+ gtk_widget_set_valign(GTK_MISC(shell->status), GTK_ALIGN_CENTER);
+#else
gtk_misc_set_alignment(GTK_MISC(shell->status), 0.0, 0.5);
+#endif
gtk_widget_show(shell->status);
gtk_box_pack_start(GTK_BOX(hbox), shell->status, FALSE, FALSE, 5);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ shell->hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
+#else
shell->hpaned = gtk_hpaned_new();
+#endif
gtk_widget_show(shell->hpaned);
gtk_box_pack_end(GTK_BOX(vbox), shell->hpaned, TRUE, TRUE, 0);
gtk_paned_set_position(GTK_PANED(shell->hpaned), 210);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
+#else
vbox = gtk_vbox_new(FALSE, 5);
+#endif
gtk_widget_show(vbox);
gtk_paned_add2(GTK_PANED(shell->hpaned), vbox);
shell->note = note_new();
gtk_box_pack_end(GTK_BOX(vbox), shell->note->event_box, FALSE, FALSE, 0);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ shell->vpaned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
+#else
shell->vpaned = gtk_vpaned_new();
+#endif
gtk_box_pack_start(GTK_BOX(vbox), shell->vpaned, TRUE, TRUE, 0);
gtk_widget_show(shell->vpaned);
@@ -479,7 +509,7 @@ static void menu_item_set_icon_always_visible(Shell *shell,
{
GtkWidget *menuitem;
gchar *path;
-
+
path = g_strdup_printf("%s/%s", parent_path, item_id);
menuitem = gtk_ui_manager_get_widget(shell->ui_manager, path);
#if GTK_CHECK_VERSION(2, 18, 0)
@@ -533,7 +563,7 @@ static void add_module_to_menu(gchar * name, GdkPixbuf * pixbuf)
"/menubar/ViewMenu/LastSep",
name, name, GTK_UI_MANAGER_MENU, TRUE);
shell->merge_ids = g_slist_prepend(shell->merge_ids, GINT_TO_POINTER(merge_id));
-
+
merge_id = gtk_ui_manager_new_merge_id(shell->ui_manager);
gtk_ui_manager_add_ui(shell->ui_manager,
merge_id,
@@ -579,7 +609,7 @@ add_module_entry_to_view_menu(gchar * module, gchar * name,
shell->merge_ids = g_slist_prepend(shell->merge_ids, GINT_TO_POINTER(merge_id));
menu_item_set_icon_always_visible(shell, path, name);
-
+
g_free(path);
}
@@ -589,7 +619,7 @@ void shell_add_modules_to_gui(gpointer _shell_module, gpointer _shell_tree)
ShellTree *shelltree = (ShellTree *) _shell_tree;
GtkTreeStore *store = GTK_TREE_STORE(shelltree->model);
GtkTreeIter parent;
-
+
if (!module) {
return;
}
@@ -645,19 +675,28 @@ static void __tree_iter_destroy(gpointer data)
ShellSummary *summary_new(void)
{
ShellSummary *summary;
-
+
summary = g_new0(ShellSummary, 1);
summary->scroll = gtk_scrolled_window_new(NULL, NULL);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ summary->view = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
+#else
summary->view = gtk_vbox_new(FALSE, 5);
+#endif
summary->items = NULL;
gtk_container_set_border_width(GTK_CONTAINER(summary->view), 6);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(summary->scroll),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ gtk_container_add(GTK_SCROLLED_WINDOW(summary->scroll),
+ summary->view);
+#else
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(summary->scroll),
summary->view);
- gtk_widget_show_all(summary->scroll);
+#endif
+ gtk_widget_show_all(summary->scroll);
return summary;
}
@@ -684,7 +723,7 @@ void shell_init(GSList * modules)
shell->moreinfo = info_tree_new(TRUE);
shell->loadgraph = load_graph_new(75);
shell->summary = summary_new();
-
+
update_tbl = g_hash_table_new_full(g_str_hash, g_str_equal,
g_free, __tree_iter_destroy);
@@ -700,7 +739,7 @@ void shell_init(GSList * modules)
NULL);
gtk_notebook_append_page(GTK_NOTEBOOK(shell->notebook),
shell->summary->scroll, NULL);
-
+
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(shell->notebook), FALSE);
gtk_notebook_set_show_border(GTK_NOTEBOOK(shell->notebook), FALSE);
@@ -723,10 +762,9 @@ void shell_init(GSList * modules)
shell_action_set_enabled("RefreshAction", FALSE);
shell_action_set_enabled("CopyAction", FALSE);
- shell_action_set_enabled("SaveGraphAction", FALSE);
shell_action_set_active("SidePaneAction", TRUE);
shell_action_set_active("ToolbarAction", TRUE);
-
+
#ifndef HAS_LIBSOUP
shell_action_set_enabled("SyncManagerAction", FALSE);
#else
@@ -738,21 +776,21 @@ static gboolean update_field(gpointer data)
{
ShellFieldUpdate *fu;
GtkTreeIter *iter;
-
+
fu = (ShellFieldUpdate *) data;
g_return_val_if_fail(fu != NULL, FALSE);
-
+
DEBUG("update_field [%s]", fu->field_name);
-
+
iter = g_hash_table_lookup(update_tbl, fu->field_name);
if (!iter) {
return FALSE;
}
-
+
/* if the entry is still selected, update it */
if (iter && fu->entry->selected && fu->entry->fieldfunc) {
GtkTreeStore *store = GTK_TREE_STORE(shell->info->model);
- gchar *value = fu->entry->fieldfunc(_(fu->field_name));
+ gchar *value = fu->entry->fieldfunc(fu->field_name);
/*
* this function is also used to feed the load graph when ViewType
@@ -761,7 +799,7 @@ static gboolean update_field(gpointer data)
if (shell->view_type == SHELL_VIEW_LOAD_GRAPH &&
gtk_tree_selection_iter_is_selected(shell->info->selection,
iter)) {
- load_graph_update(shell->loadgraph, atoi(value));
+ load_graph_update(shell->loadgraph, atof(value));
}
gtk_tree_store_set(store, iter, INFO_TREE_COL_VALUE, value, -1);
@@ -802,20 +840,31 @@ static gboolean update_field(gpointer data)
static gboolean reload_section(gpointer data)
{
ShellModuleEntry *entry = (ShellModuleEntry *) data;
+#if GTK_CHECK_VERSION(2, 14, 0)
+ GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(shell->window));
+#endif
/* if the entry is still selected, update it */
if (entry->selected) {
GtkTreePath *path = NULL;
GtkTreeIter iter;
double pos_info_scroll, pos_more_scroll;
-
+
/* save current position */
+#if GTK_CHECK_VERSION(3, 0, 0)
+ /* TODO:GTK3 */
+#else
pos_info_scroll = RANGE_GET_VALUE(info, vscrollbar);
pos_more_scroll = RANGE_GET_VALUE(moreinfo, vscrollbar);
-
+#endif
+
/* avoid drawing the window while we reload */
+#if GTK_CHECK_VERSION(2, 14, 0)
+ gdk_window_freeze_updates(gdk_window);
+#else
gdk_window_freeze_updates(shell->window->window);
-
+#endif
+
/* gets the current selected path */
if (gtk_tree_selection_get_selected
(shell->info->selection, &shell->info->model, &iter)) {
@@ -835,12 +884,20 @@ static gboolean reload_section(gpointer data)
gtk_tree_path_free(path);
} else {
/* restore position */
+#if GTK_CHECK_VERSION(3, 0, 0)
+ /* TODO:GTK3 */
+#else
RANGE_SET_VALUE(info, vscrollbar, pos_info_scroll);
RANGE_SET_VALUE(moreinfo, vscrollbar, pos_more_scroll);
+#endif
}
-
+
/* make the window drawable again */
+#if GTK_CHECK_VERSION(2, 14, 0)
+ gdk_window_thaw_updates(gdk_window);
+#else
gdk_window_thaw_updates(shell->window->window);
+#endif
}
/* destroy the timeout: it'll be set up again */
@@ -892,15 +949,25 @@ info_tree_compare_val_func(GtkTreeModel * model,
static void set_view_type(ShellViewType viewtype, gboolean reload)
{
+#if GTK_CHECK_VERSION(2, 18, 0)
+ GtkAllocation* alloc;
+#endif
+
if (viewtype < SHELL_VIEW_NORMAL || viewtype >= SHELL_VIEW_N_VIEWS)
viewtype = SHELL_VIEW_NORMAL;
shell->normalize_percentage = TRUE;
shell->view_type = viewtype;
+ shell->_order_type = SHELL_ORDER_DESCENDING;
+
+ /* use an unsorted tree model */
+ GtkTreeSortable *sortable = GTK_TREE_SORTABLE(shell->info->model);
- /* reset to the default model */
+ gtk_tree_sortable_set_sort_column_id(sortable,
+ GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID,
+ GTK_SORT_ASCENDING);
gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view),
- shell->info->model);
+ GTK_TREE_MODEL(sortable));
/* reset to the default view columns */
if (!reload) {
@@ -909,13 +976,10 @@ static void set_view_type(ShellViewType viewtype, gboolean reload)
gtk_tree_view_column_set_visible(shell->info->col_progress, FALSE);
gtk_tree_view_column_set_visible(shell->info->col_value, TRUE);
}
-
+
/* turn off the rules hint */
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(shell->info->view), FALSE);
- /* turn off the save graphic action */
- shell_action_set_enabled("SaveGraphAction", FALSE);
-
close_note(NULL, NULL);
switch (viewtype) {
@@ -923,7 +987,7 @@ static void set_view_type(ShellViewType viewtype, gboolean reload)
case SHELL_VIEW_NORMAL:
gtk_widget_show(shell->info->scroll);
gtk_widget_hide(shell->notebook);
-
+
if (!reload) {
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), FALSE);
}
@@ -931,42 +995,57 @@ static void set_view_type(ShellViewType viewtype, gboolean reload)
case SHELL_VIEW_DUAL:
gtk_widget_show(shell->info->scroll);
gtk_widget_show(shell->moreinfo->scroll);
- gtk_notebook_set_page(GTK_NOTEBOOK(shell->notebook), 0);
- gtk_widget_show(shell->notebook);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 0);
+ gtk_widget_show(shell->notebook);
- gtk_paned_set_position(GTK_PANED(shell->vpaned),
- shell->hpaned->allocation.height / 2);
- break;
+#if GTK_CHECK_VERSION(2, 18, 0)
+ alloc = g_new(GtkAllocation, 1);
+ gtk_widget_get_allocation(shell->hpaned, alloc);
+ gtk_paned_set_position(GTK_PANED(shell->vpaned), alloc->height / 2);
+ g_free(alloc);
+#else
+ gtk_paned_set_position(GTK_PANED(shell->vpaned),
+ shell->hpaned->allocation.height / 2);
+#endif
+ break;
case SHELL_VIEW_LOAD_GRAPH:
gtk_widget_show(shell->info->scroll);
- gtk_notebook_set_page(GTK_NOTEBOOK(shell->notebook), 1);
- gtk_widget_show(shell->notebook);
- load_graph_clear(shell->loadgraph);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 1);
+ gtk_widget_show(shell->notebook);
+ load_graph_clear(shell->loadgraph);
- gtk_paned_set_position(GTK_PANED(shell->vpaned),
+#if GTK_CHECK_VERSION(2, 18, 0)
+ alloc = g_new(GtkAllocation, 1);
+ gtk_widget_get_allocation(shell->hpaned, alloc);
+ gtk_paned_set_position(GTK_PANED(shell->vpaned),
+ alloc->height - load_graph_get_height(shell->loadgraph) - 16);
+ g_free(alloc);
+#else
+ gtk_paned_set_position(GTK_PANED(shell->vpaned),
shell->hpaned->allocation.height -
- shell->loadgraph->height - 16);
+ load_graph_get_height(shell->loadgraph) - 16);
+#endif
+
break;
case SHELL_VIEW_PROGRESS_DUAL:
gtk_widget_show(shell->notebook);
gtk_widget_show(shell->moreinfo->scroll);
- gtk_notebook_set_page(GTK_NOTEBOOK(shell->notebook), 0);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 0);
/* fallthrough */
case SHELL_VIEW_PROGRESS:
gtk_widget_show(shell->info->scroll);
- shell_action_set_enabled("SaveGraphAction", TRUE);
-
+
if (!reload) {
gtk_tree_view_column_set_visible(shell->info->col_progress, TRUE);
gtk_tree_view_column_set_visible(shell->info->col_value, FALSE);
}
-
+
if (viewtype == SHELL_VIEW_PROGRESS)
gtk_widget_hide(shell->notebook);
break;
case SHELL_VIEW_SUMMARY:
- gtk_notebook_set_page(GTK_NOTEBOOK(shell->notebook), 2);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 2);
gtk_widget_show(shell->notebook);
gtk_widget_hide(shell->info->scroll);
@@ -1104,11 +1183,11 @@ group_handle_normal(GKeyFile * key_file, ShellModuleEntry * entry,
gchar *value;
GtkTreeIter child;
- value = g_key_file_get_value(key_file, group, key, NULL);
- if (entry->fieldfunc && value && g_str_equal(value, "...")) {
- g_free(value);
- value = entry->fieldfunc(_(key));
- }
+ value = g_key_file_get_value(key_file, group, key, NULL);
+ if (entry->fieldfunc && value && g_str_equal(value, "...")) {
+ g_free(value);
+ value = entry->fieldfunc(key);
+ }
if ((key && value) && g_utf8_validate(key, -1, NULL) && g_utf8_validate(value, -1, NULL)) {
if (ngroups == 1) {
@@ -1116,7 +1195,7 @@ group_handle_normal(GKeyFile * key_file, ShellModuleEntry * entry,
} else {
gtk_tree_store_append(store, &child, &parent);
}
-
+
/* FIXME: use g_key_file_get_string_list? */
if (g_utf8_strchr(value, -1, '|')) {
gchar **columns = g_strsplit(value, "|", 0);
@@ -1284,7 +1363,7 @@ void shell_clear_field_updates(void)
{
if (update_sfusrc) {
GSList *sfusrc;
-
+
for (sfusrc = update_sfusrc; sfusrc; sfusrc = sfusrc->next) {
ShellFieldUpdateSource *src =
(ShellFieldUpdateSource *) sfusrc->data;
@@ -1299,6 +1378,17 @@ void shell_clear_field_updates(void)
}
}
+static gboolean
+select_first_item(gpointer data)
+{
+ GtkTreeIter first;
+
+ if (gtk_tree_model_get_iter_first(shell->info->model, &first))
+ gtk_tree_selection_select_iter(shell->info->selection, &first);
+
+ return FALSE;
+}
+
static void
module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
{
@@ -1308,12 +1398,19 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
gboolean has_shell_param = FALSE;
gint i;
gsize ngroups;
+#if GTK_CHECK_VERSION(2, 14, 0)
+ GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(shell->info->view));
+#endif
module_entry_scan(entry);
key_data = module_entry_function(entry);
/* */
+#if GTK_CHECK_VERSION(2, 14, 0)
+ gdk_window_freeze_updates(gdk_window);
+#else
gdk_window_freeze_updates(shell->info->view->window);
+#endif
g_object_ref(shell->info->model);
gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view), NULL);
@@ -1325,7 +1422,7 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
/* recreate the iter hash table */
h_hash_table_remove_all(update_tbl);
}
-
+
shell_clear_field_updates();
store = GTK_TREE_STORE(shell->info->model);
@@ -1353,18 +1450,22 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
g_strfreev(keys);
}
-
+
/* */
if (!has_shell_param) {
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), FALSE);
}
-
+
/* */
g_object_unref(shell->info->model);
gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view), shell->info->model);
gtk_tree_view_expand_all(GTK_TREE_VIEW(shell->info->view));
+#if GTK_CHECK_VERSION(2, 14, 0)
+ gdk_window_thaw_updates(gdk_window);
+#else
gdk_window_thaw_updates(shell->info->view->window);
+#endif
shell_set_note_from_entry(entry);
if (shell->view_type == SHELL_VIEW_PROGRESS || shell->view_type == SHELL_VIEW_PROGRESS_DUAL) {
@@ -1384,6 +1485,15 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
g_strfreev(groups);
g_key_file_free(key_file);
g_free(key_data);
+
+ if (!reload) {
+ switch (shell->view_type) {
+ case SHELL_VIEW_DUAL:
+ case SHELL_VIEW_LOAD_GRAPH:
+ case SHELL_VIEW_PROGRESS_DUAL:
+ g_idle_add(select_first_item, NULL);
+ }
+ }
}
static void info_selected_show_extra(gchar * data)
@@ -1426,7 +1536,7 @@ static gchar *shell_summary_clear_value(gchar *value)
{
GKeyFile *keyfile;
gchar *return_value;
-
+
keyfile = g_key_file_new();
if (!value) return_value = g_strdup("");
else
@@ -1434,18 +1544,18 @@ static gchar *shell_summary_clear_value(gchar *value)
strlen(value), 0, NULL)) {
gchar **groups;
gint group;
-
+
return_value = g_strdup("");
-
+
groups = g_key_file_get_groups(keyfile, NULL);
for (group = 0; groups[group]; group++) {
gchar **keys;
gint key;
-
+
keys = g_key_file_get_keys(keyfile, groups[group], NULL, NULL);
for (key = 0; keys[key]; key++) {
gchar *temp = keys[key];
-
+
if (*temp == '$') {
temp++;
while (*temp && *temp != '$')
@@ -1458,17 +1568,17 @@ static gchar *shell_summary_clear_value(gchar *value)
keys[key], NULL);
}
}
-
+
g_strfreev(keys);
}
-
+
g_strfreev(groups);
} else {
return_value = g_strdup(value);
}
-
+
g_key_file_free(keyfile);
-
+
return g_strstrip(return_value);
}
@@ -1484,25 +1594,30 @@ static void shell_summary_add_item(ShellSummary *summary,
GtkWidget *content;
GtkWidget *alignment;
gchar *temp;
-
+
temp = shell_summary_clear_value(value);
-
+
/* creates the frame */
frame = gtk_frame_new(NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame),
GTK_SHADOW_NONE);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ frame_label_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+#else
frame_label_box = gtk_hbox_new(FALSE, 5);
+#endif
frame_image = icon_cache_get_image(icon);
frame_label = gtk_label_new(name);
gtk_label_set_use_markup(GTK_LABEL(frame_label), TRUE);
gtk_box_pack_start(GTK_BOX(frame_label_box), frame_image, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(frame_label_box), frame_label, FALSE, FALSE, 0);
+ /* TODO:GTK3 gtk_alignment_new(), etc is deprecated from 3.14 */
alignment = gtk_alignment_new(0.5, 0.5, 1, 1);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 48, 0);
gtk_widget_show(alignment);
gtk_container_add(GTK_CONTAINER(frame), alignment);
- gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 48, 0);
content = gtk_label_new(temp);
gtk_misc_set_alignment(GTK_MISC(content), 0.0, 0.5);
@@ -1510,29 +1625,29 @@ static void shell_summary_add_item(ShellSummary *summary,
gtk_widget_show_all(frame);
gtk_widget_show_all(frame_label_box);
-
+
gtk_frame_set_label_widget(GTK_FRAME(frame), frame_label_box);
-
+
/* pack the item on the summary screen */
gtk_box_pack_start(GTK_BOX(shell->summary->view), frame, FALSE, FALSE, 4);
/* add the item to the list of summary items */
summary->items = g_slist_prepend(summary->items, frame);
-
+
g_free(temp);
}
static void shell_summary_clear(ShellSummary *summary)
{
GSList *item;
-
+
for (item = summary->items; item; item = item->next) {
gtk_widget_destroy(GTK_WIDGET(item->data));
}
-
+
g_slist_free(summary->items);
summary->items = NULL;
-
+
if (summary->header) gtk_widget_destroy(summary->header);
summary->header = NULL;
}
@@ -1541,20 +1656,20 @@ static void shell_summary_create_header(ShellSummary *summary,
{
GtkWidget *header, *label;
gchar *temp;
-
+
temp = g_strdup_printf(_("<b>%s \342\206\222 Summary</b>"), title);
-
+
header = gtk_menu_item_new_with_label(temp);
gtk_menu_item_select(GTK_MENU_ITEM(header));
gtk_widget_show(header);
-
+
label = gtk_bin_get_child(GTK_BIN(header));
gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
-
+
gtk_box_pack_start(GTK_BOX(shell->summary->view), header, FALSE, FALSE, 4);
-
+
summary->header = header;
-
+
g_free(temp);
}
@@ -1566,20 +1681,20 @@ static void shell_show_summary(void)
set_view_type(SHELL_VIEW_SUMMARY, FALSE);
shell_summary_clear(shell->summary);
shell_summary_create_header(shell->summary, shell->selected_module->name);
-
+
keyfile = g_key_file_new();
summary = shell->selected_module->summaryfunc();
-
+
if (g_key_file_load_from_data(keyfile, summary,
strlen(summary), 0, NULL)) {
gchar **groups;
gint group;
-
+
groups = g_key_file_get_groups(keyfile, NULL);
-
+
for (group = 0; groups[group]; group++) {
gchar *icon, *method, *method_result;
-
+
shell_status_pulse();
icon = g_key_file_get_string(keyfile, groups[group], "Icon", NULL);
@@ -1589,25 +1704,25 @@ static void shell_show_summary(void)
} else {
method_result = g_strdup("N/A");
}
-
+
shell_summary_add_item(shell->summary,
icon, groups[group], method_result);
shell_status_pulse();
-
+
g_free(icon);
g_free(method);
g_free(method_result);
}
-
+
g_strfreev(groups);
} else {
DEBUG("error while parsing summary");
set_view_type(SHELL_VIEW_NORMAL, FALSE);
- }
-
+ }
+
g_free(summary);
g_key_file_free(keyfile);
-
+
shell_view_set_enabled(TRUE);
}
@@ -1619,6 +1734,7 @@ static void module_selected(gpointer data)
ShellModuleEntry *entry;
static ShellModuleEntry *current = NULL;
static gboolean updating = FALSE;
+ GtkScrollbar *hscrollbar, *vscrollbar;
/* Gets the currently selected item on the left-side TreeView; if there is no
selection, silently return */
@@ -1626,7 +1742,7 @@ static void module_selected(gpointer data)
return;
}
- /* Mark the currently selected module as "unselected"; this is used to kill the
+ /* Mark the currently selected module as "unselected"; this is used to kill the
update timeout. */
if (current) {
current->selected = FALSE;
@@ -1641,7 +1757,7 @@ static void module_selected(gpointer data)
if (!gtk_tree_model_iter_parent(model, &parent, &iter)) {
memcpy(&parent, &iter, sizeof(iter));
}
-
+
gtk_tree_model_get(model, &parent, TREE_COL_MODULE, &shell->selected_module, -1);
/* Get the current selection and shows its related info */
@@ -1655,15 +1771,19 @@ static void module_selected(gpointer data)
entry->selected = TRUE;
shell->selected = entry;
module_selected_show_info(entry, FALSE);
-
+
info_selected_show_extra(NULL); /* clears the more info store */
gtk_tree_view_columns_autosize(GTK_TREE_VIEW(shell->info->view));
/* urgh. why don't GTK do this when the model is cleared? */
+#if GTK_CHECK_VERSION(3, 0, 0)
+ /* TODO:GTK3 */
+#else
RANGE_SET_VALUE(info, vscrollbar, 0.0);
RANGE_SET_VALUE(info, hscrollbar, 0.0);
RANGE_SET_VALUE(moreinfo, vscrollbar, 0.0);
RANGE_SET_VALUE(moreinfo, hscrollbar, 0.0);
+#endif
title = g_strdup_printf("%s - %s", shell->selected_module->name, entry->name);
shell_set_title(shell, title);
@@ -1700,7 +1820,7 @@ static void info_selected(GtkTreeSelection * ts, gpointer data)
if (!gtk_tree_selection_get_selected(ts, &model, &parent))
return;
-
+
if (shell->view_type == SHELL_VIEW_NORMAL ||
shell->view_type == SHELL_VIEW_PROGRESS) {
gtk_tree_selection_unselect_all(ts);
diff --git a/shell/syncmanager.c b/shell/syncmanager.c
index 0b95e720..db94d474 100644
--- a/shell/syncmanager.c
+++ b/shell/syncmanager.c
@@ -117,7 +117,7 @@ void sync_manager_clear_entries(void)
{
#ifdef HAS_LIBSOUP
DEBUG("clearing syncmanager entries");
-
+
g_slist_free(entries);
entries = NULL;
#else
@@ -470,7 +470,7 @@ static void sync_dialog_netarea_start_actions(SyncDialog * sd,
gtk_label_set_use_markup(GTK_LABEL(labels[i]), TRUE);
gtk_label_set_use_markup(GTK_LABEL(status_labels[i]), TRUE);
-
+
gtk_misc_set_alignment(GTK_MISC(labels[i]), 0.0, 0.5);
gtk_misc_set_alignment(GTK_MISC(status_labels[i]), 1.0, 0.5);
@@ -489,8 +489,8 @@ static void sync_dialog_netarea_start_actions(SyncDialog * sd,
if (sd->flag_cancel) {
markup =
- g_strdup_printf(_("<s>%s</s> <i>(canceled)</i>"),
- sna[i].name);
+ g_strdup_printf("<s>%s</s> <i>%s</i>",
+ sna[i].name, _("(canceled)"));
gtk_label_set_markup(GTK_LABEL(labels[i]), markup);
g_free(markup);
@@ -506,8 +506,8 @@ static void sync_dialog_netarea_start_actions(SyncDialog * sd,
if (sna[i].do_action && !sna[i].do_action(sd, &sna[i])) {
markup =
- g_strdup_printf(_("<b><s>%s</s></b> <i>(failed)</i>"),
- sna[i].name);
+ g_strdup_printf("<b><s>%s</s></b> <i>%s</i>",
+ sna[i].name, _("(failed)"));
gtk_label_set_markup(GTK_LABEL(labels[i]), markup);
g_free(markup);
@@ -667,18 +667,29 @@ static SyncDialog *sync_dialog_new(GtkWidget *parent)
gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
+#if GTK_CHECK_VERSION(2, 14, 0)
+ dialog1_vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
+#else
dialog1_vbox = GTK_DIALOG(dialog)->vbox;
+#endif
gtk_box_set_spacing(GTK_BOX(dialog1_vbox), 5);
gtk_container_set_border_width(GTK_CONTAINER(dialog1_vbox), 4);
gtk_widget_show(dialog1_vbox);
-
+#if GTK_CHECK_VERSION(3, 0, 0)
+ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+#else
hbox = gtk_hbox_new(FALSE, 5);
+#endif
gtk_box_pack_start(GTK_BOX(dialog1_vbox), hbox, FALSE, FALSE, 0);
label = gtk_label_new(LABEL_SYNC_DEFAULT);
gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ gtk_widget_set_valign(label, GTK_ALIGN_CENTER);
+#else
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+#endif
gtk_box_pack_start(GTK_BOX(hbox),
icon_cache_get_image("syncmanager.png"),
@@ -725,29 +736,43 @@ static SyncDialog *sync_dialog_new(GtkWidget *parent)
populate_store(store);
+#if GTK_CHECK_VERSION(2, 14, 0)
+ dialog1_action_area = gtk_dialog_get_action_area(GTK_DIALOG(dialog));
+#else
dialog1_action_area = GTK_DIALOG(dialog)->action_area;
+#endif
gtk_widget_show(dialog1_action_area);
gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog1_action_area),
GTK_BUTTONBOX_END);
- button8 = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ button8 = gtk_button_new_with_mnemonic(_("_Cancel"));
gtk_widget_show(button8);
gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button8,
GTK_RESPONSE_CANCEL);
+#if GTK_CHECK_VERSION(2, 18, 0)
+ gtk_widget_set_can_default(button8, TRUE);
+#else
GTK_WIDGET_SET_FLAGS(button8, GTK_CAN_DEFAULT);
-
+#endif
button7 = gtk_button_new_with_mnemonic(_("_Synchronize"));
gtk_widget_show(button7);
gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button7,
GTK_RESPONSE_ACCEPT);
+#if GTK_CHECK_VERSION(2, 18, 0)
+ gtk_widget_set_can_default(button7, TRUE);
+#else
GTK_WIDGET_SET_FLAGS(button7, GTK_CAN_DEFAULT);
-
+#endif
button6 = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
g_signal_connect(G_OBJECT(button6), "clicked",
(GCallback) close_clicked, NULL);
gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button6,
GTK_RESPONSE_ACCEPT);
+#if GTK_CHECK_VERSION(2, 18, 0)
+ gtk_widget_set_can_default(button6, TRUE);
+#else
GTK_WIDGET_SET_FLAGS(button6, GTK_CAN_DEFAULT);
+#endif
sd->dialog = dialog;
sd->button_sync = button7;