diff --git a/src/process-tree-view.c b/src/process-tree-view.c index d749d90..3f50c06 100644 --- a/src/process-tree-view.c +++ b/src/process-tree-view.c @@ -60,6 +60,8 @@ static void xtm_process_tree_view_finalize (GObject *object); static gboolean treeview_clicked (XtmProcessTreeView *treeview, GdkEventButton *event); static gboolean treeview_key_pressed (XtmProcessTreeView *treeview, GdkEventKey *event); +static void column_task_pack_cells (XtmProcessTreeView *treeview, GtkTreeViewColumn *column); +static void cb_show_application_icons_toggled (XtmProcessTreeView *treeview); static void columns_changed (XtmProcessTreeView *treeview); static void read_columns_positions (XtmProcessTreeView *treeview); static void save_columns_positions (XtmProcessTreeView *treeview); @@ -81,11 +83,7 @@ xtm_process_tree_view_class_init (XtmProcessTreeViewClass *klass) static void xtm_process_tree_view_init (XtmProcessTreeView *treeview) { -#ifdef HAVE_WNCK - GtkCellRenderer *cell_text, *cell_right_aligned, *cell_icon, *cell_cmdline; -#else - GtkCellRenderer *cell_text, *cell_right_aligned, *cell_cmdline; -#endif + GtkCellRenderer *cell_text, *cell_right_aligned; GtkTreeViewColumn *column; gboolean visible; @@ -119,9 +117,6 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview) cell_right_aligned = gtk_cell_renderer_text_new (); g_object_set (cell_right_aligned, "xalign", 1.0, NULL); - cell_cmdline = gtk_cell_renderer_text_new (); - g_object_set (cell_cmdline, "ellipsize", PANGO_ELLIPSIZE_END, NULL); - /* Retrieve initial tree view columns positions */ read_columns_positions (treeview); @@ -129,13 +124,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview) #define COLUMN_PROPERTIES "expand", TRUE, "clickable", TRUE, "reorderable", TRUE, "resizable", TRUE, "visible", TRUE column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (GTK_TREE_VIEW_COLUMN (column), _("Task")); -#ifdef HAVE_WNCK - cell_icon = gtk_cell_renderer_pixbuf_new (); - gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), cell_icon, FALSE); - gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), cell_icon, "pixbuf", XTM_PTV_COLUMN_ICON, "cell-background", XTM_PTV_COLUMN_BACKGROUND, NULL); -#endif - gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), cell_cmdline, TRUE); - gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), cell_cmdline, "text", XTM_PTV_COLUMN_COMMAND, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL); + column_task_pack_cells (treeview, column); g_object_set (column, COLUMN_PROPERTIES, NULL); g_object_set_data (G_OBJECT (column), "sort-column-id", GINT_TO_POINTER (XTM_PTV_COLUMN_COMMAND)); g_object_set_data (G_OBJECT (column), "column-id", GINT_TO_POINTER (COLUMN_COMMAND)); @@ -227,6 +216,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview) g_signal_connect (treeview, "columns-changed", G_CALLBACK (columns_changed), NULL); g_signal_connect (treeview, "button-press-event", G_CALLBACK (treeview_clicked), NULL); g_signal_connect (treeview, "key-press-event", G_CALLBACK (treeview_key_pressed), NULL); + g_signal_connect_swapped (treeview->settings, "notify::show-application-icons", G_CALLBACK (cb_show_application_icons_toggled), treeview); } static void @@ -258,6 +248,37 @@ xtm_process_tree_view_finalize (GObject *object) * Helper functions */ +static void +column_task_pack_cells (XtmProcessTreeView *treeview, GtkTreeViewColumn *column) +{ + GtkCellRenderer *cell_cmdline, *cell_icon; + gboolean show_application_icons; + + g_object_get (treeview->settings, "show-application-icons", &show_application_icons, NULL); + if (show_application_icons) + { +#ifdef HAVE_WNCK + cell_icon = gtk_cell_renderer_pixbuf_new (); + gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), cell_icon, FALSE); + gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), cell_icon, "pixbuf", XTM_PTV_COLUMN_ICON, "cell-background", XTM_PTV_COLUMN_BACKGROUND, NULL); +#endif + } + + cell_cmdline = gtk_cell_renderer_text_new (); + g_object_set (cell_cmdline, "ellipsize", PANGO_ELLIPSIZE_END, NULL); + gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), cell_cmdline, TRUE); + gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), cell_cmdline, "text", XTM_PTV_COLUMN_COMMAND, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL); +} + +static void +cb_show_application_icons_toggled (XtmProcessTreeView *treeview) +{ + GtkTreeViewColumn *column; + column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), treeview->columns_positions[COLUMN_COMMAND]); + gtk_tree_view_column_clear (column); + column_task_pack_cells (treeview, column); +} + static void columns_changed (XtmProcessTreeView *treeview) { diff --git a/src/settings-dialog.c b/src/settings-dialog.c index 419af6d..ca6baf7 100644 --- a/src/settings-dialog.c +++ b/src/settings-dialog.c @@ -98,6 +98,7 @@ xtm_settings_dialog_init (XtmSettingsDialog *dialog) dialog->window = GTK_WIDGET (gtk_builder_get_object (builder, "settings-dialog")); + builder_bind_toggle_button (builder, "button-show-application-icons", dialog->settings, "show-application-icons"); builder_bind_toggle_button (builder, "button-full-command-line", dialog->settings, "full-command-line"); builder_bind_toggle_button (builder, "button-more-precision", dialog->settings, "more-precision"); builder_bind_toggle_button (builder, "button-monitor-paint-box", dialog->settings, "monitor-paint-box"); diff --git a/src/settings-dialog.ui b/src/settings-dialog.ui index f4e1211..4c84edc 100644 --- a/src/settings-dialog.ui +++ b/src/settings-dialog.ui @@ -45,6 +45,18 @@ True vertical 6 + + + Show application icons + True + True + False + True + + + 0 + + Show full command lines @@ -56,7 +68,7 @@ False False - 0 + 1 @@ -70,7 +82,7 @@ False False - 1 + 2 @@ -85,7 +97,7 @@ False False - 2 + 3 @@ -110,7 +122,7 @@ False False - 3 + 4 diff --git a/src/settings.c b/src/settings.c index 5224442..3b9d11b 100644 --- a/src/settings.c +++ b/src/settings.c @@ -37,6 +37,7 @@ enum PROP_FULL_COMMAND_LINE, PROP_SHOW_STATUS_ICON, PROP_MONITOR_PAINT_BOX, + PROP_SHOW_APPLICATION_ICONS, PROP_TOOLBAR_STYLE, PROP_PROMPT_TERMINATE_TASK, PROP_REFRESH_RATE, @@ -94,6 +95,8 @@ xtm_settings_class_init (XtmSettingsClass *klass) g_param_spec_boolean ("show-status-icon", "ShowStatusIcon", "Show/hide the status icon", TRUE, G_PARAM_READWRITE)); g_object_class_install_property (class, PROP_MONITOR_PAINT_BOX, g_param_spec_boolean ("monitor-paint-box", "MonitorPaintBox", "Paint box around monitor", TRUE, G_PARAM_READWRITE)); + g_object_class_install_property (class, PROP_SHOW_APPLICATION_ICONS, + g_param_spec_boolean ("show-application-icons", "ShowApplicationIcons", "Show application icons", TRUE, G_PARAM_READWRITE)); g_object_class_install_property (class, PROP_TOOLBAR_STYLE, g_param_spec_enum ("toolbar-style", "ToolbarStyle", "Toolbar style", XTM_TYPE_TOOLBAR_STYLE, XTM_TOOLBAR_STYLE_DEFAULT, G_PARAM_READWRITE)); g_object_class_install_property (class, PROP_PROMPT_TERMINATE_TASK,