diff options
Diffstat (limited to 'capplet/gsm-properties-dialog.c')
-rw-r--r-- | capplet/gsm-properties-dialog.c | 160 |
1 files changed, 103 insertions, 57 deletions
diff --git a/capplet/gsm-properties-dialog.c b/capplet/gsm-properties-dialog.c index 592b130..96a0dc3 100644 --- a/capplet/gsm-properties-dialog.c +++ b/capplet/gsm-properties-dialog.c @@ -4,6 +4,7 @@ * Copyright (C) 2007 Vincent Untz. * Copyright (C) 2008 Lucas Rocha. * Copyright (C) 2008 William Jon McCann <[email protected]> + * Copyright (C) 2012-2021 MATE Developers * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,6 +32,7 @@ #include "gsm-properties-dialog.h" #include "gsm-app-dialog.h" +#include "msm-desktop-app-dialog.h" #include "gsm-util.h" #include "gsp-app.h" #include "gsp-app-manager.h" @@ -39,6 +41,7 @@ #define CAPPLET_TREEVIEW_WIDGET_NAME "session_properties_treeview" #define CAPPLET_ADD_WIDGET_NAME "session_properties_add_button" +#define CAPPLET_DESKTOP_ADD_WIDGET_NAME "session_properties_desktop_add_button" #define CAPPLET_DELETE_WIDGET_NAME "session_properties_delete_button" #define CAPPLET_EDIT_WIDGET_NAME "session_properties_edit_button" #define CAPPLET_SAVE_WIDGET_NAME "session_properties_save_button" @@ -60,6 +63,7 @@ struct _GsmPropertiesDialog GtkTreeView *treeview; GtkWidget *add_button; + GtkWidget *desktop_add_button; GtkWidget *delete_button; GtkWidget *edit_button; @@ -69,8 +73,7 @@ struct _GsmPropertiesDialog }; enum { - STORE_COL_VISIBLE = 0, - STORE_COL_ENABLED, + STORE_COL_ENABLED = 0, STORE_COL_GICON, STORE_COL_DESCRIPTION, STORE_COL_APP, @@ -102,6 +105,8 @@ find_by_app (GtkTreeModel *model, g_object_unref (iter_app); return TRUE; } + + g_object_unref (iter_app); } while (gtk_tree_model_iter_next (model, iter)); return FALSE; @@ -112,14 +117,12 @@ _fill_iter_from_app (GtkListStore *list_store, GtkTreeIter *iter, GspApp *app) { - gboolean hidden; gboolean enabled; GIcon *icon; const char *description; const char *app_name; - hidden = gsp_app_get_hidden (app); - enabled = gsp_app_get_enabled (app); + enabled = !gsp_app_get_hidden (app); icon = gsp_app_get_icon (app); description = gsp_app_get_description (app); app_name = gsp_app_get_name (app); @@ -150,7 +153,6 @@ _fill_iter_from_app (GtkListStore *list_store, } gtk_list_store_set (list_store, iter, - STORE_COL_VISIBLE, !hidden, STORE_COL_ENABLED, enabled, STORE_COL_GICON, icon, STORE_COL_DESCRIPTION, description, @@ -196,13 +198,13 @@ _app_added (GsmPropertiesDialog *dialog, GspApp *app, GspAppManager *manager) { + (void) manager; append_app (dialog, app); } static void -_app_removed (GsmPropertiesDialog *dialog, - GspApp *app, - GspAppManager *manager) +remove_app (GsmPropertiesDialog *dialog, + GspApp *app) { GtkTreeIter iter; @@ -218,6 +220,15 @@ _app_removed (GsmPropertiesDialog *dialog, } static void +_app_removed (GsmPropertiesDialog *dialog, + GspApp *app, + GspAppManager *manager) +{ + (void) manager; + remove_app (dialog, app); +} + +static void populate_model (GsmPropertiesDialog *dialog) { GSList *apps; @@ -263,10 +274,9 @@ on_startup_enabled_toggled (GtkCellRendererToggle *cell_renderer, -1); active = gtk_cell_renderer_toggle_get_active (cell_renderer); - active = !active; if (app) { - gsp_app_set_enabled (app, active); + gsp_app_set_hidden (app, active); g_object_unref (app); } } @@ -381,6 +391,33 @@ on_add_app_clicked (GtkWidget *widget, } static void +on_desktop_add_app_clicked (GtkWidget *widget, + GsmPropertiesDialog *dialog) +{ + GtkWidget *desktop_add_dialog; + gint response; + const char *filename; + + desktop_add_dialog = msm_desktop_app_dialog_new (dialog->manager); + gtk_window_set_transient_for (GTK_WINDOW (desktop_add_dialog), + GTK_WINDOW (dialog)); + + gtk_widget_show_all (desktop_add_dialog); + response = gtk_dialog_run (GTK_DIALOG (desktop_add_dialog)); + + if (response == GTK_RESPONSE_OK) + { + filename = msm_dektop_app_dialog_get_selected (MSM_DESKTOP_APP_DIALOG (desktop_add_dialog)); + if (filename != NULL) + { + gsp_app_copy_desktop_file (g_filename_to_uri (filename, NULL, NULL)); + } + } + + gtk_widget_destroy (desktop_add_dialog); +} + +static void on_delete_app_clicked (GtkWidget *widget, GsmPropertiesDialog *dialog) { @@ -462,34 +499,11 @@ on_row_activated (GtkTreeView *tree_view, } static void -update_tree_view (GsmPropertiesDialog *dialog) -{ - GSList *apps; - GSList *l; - gboolean show_hidden; - GspApp *app; - - show_hidden = g_settings_get_boolean (dialog->settings, SPC_SHOW_HIDDEN_KEY); - - apps = gsp_app_manager_get_apps (dialog->manager); - for (l = apps; l != NULL; l = l->next) { - app = GSP_APP (l->data); - if (gsp_app_get_nodisplay(app)) { - if (show_hidden) { - _app_added (dialog, app, dialog->manager); - }else{ - _app_removed (dialog, app, dialog->manager); - } - } - } - g_slist_free (apps); -} - -static void -on_show_hidden_clicked (GtkWidget *widget, +on_show_hidden_toggled (GtkToggleButton *togglebutton, GsmPropertiesDialog *dialog) { - update_tree_view (dialog); + (void) togglebutton; + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (dialog->tree_filter)); } static void @@ -557,11 +571,41 @@ on_main_notebook_scroll_event (GtkWidget *widget, return TRUE; } +static gboolean +visible_func (GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + gboolean visible = FALSE; + GtkToggleButton *toggle_button = data;; + GspApp *app; + gboolean show_hidden; + + show_hidden = gtk_toggle_button_get_active (toggle_button); + + gtk_tree_model_get (model, iter, + STORE_COL_APP, &app, + -1); + + if (app) { + gboolean nodisplay; + + nodisplay = gsp_app_get_nodisplay (app); + visible = show_hidden || !nodisplay; + g_object_unref (app); + } else { + visible = show_hidden; + } + + return visible; +} + static void setup_dialog (GsmPropertiesDialog *dialog) { GtkTreeView *treeview; GtkWidget *button; + GtkToggleButton *toggle_button; GtkTreeModel *tree_filter; GtkTreeViewColumn *column; GtkCellRenderer *renderer; @@ -576,9 +620,20 @@ setup_dialog (GsmPropertiesDialog *dialog) _("_Close"), "window-close", GTK_RESPONSE_CLOSE); + dialog->settings = g_settings_new (SPC_CONFIG_SCHEMA); + + toggle_button = GTK_TOGGLE_BUTTON (gtk_builder_get_object (dialog->xml, + CAPPLET_SHOW_HIDDEN_WIDGET_NAME)); + + g_settings_bind (dialog->settings, SPC_SHOW_HIDDEN_KEY, + toggle_button, "active", G_SETTINGS_BIND_DEFAULT); + + g_signal_connect (toggle_button, "toggled", + G_CALLBACK (on_show_hidden_toggled), + dialog); + dialog->list_store = gtk_list_store_new (NUMBER_OF_COLUMNS, G_TYPE_BOOLEAN, - G_TYPE_BOOLEAN, G_TYPE_ICON, G_TYPE_STRING, G_TYPE_OBJECT, @@ -588,8 +643,7 @@ setup_dialog (GsmPropertiesDialog *dialog) g_object_unref (dialog->list_store); dialog->tree_filter = tree_filter; - gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (tree_filter), - STORE_COL_VISIBLE); + gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (tree_filter), visible_func, toggle_button, NULL); treeview = GTK_TREE_VIEW (gtk_builder_get_object (dialog->xml, CAPPLET_TREEVIEW_WIDGET_NAME)); @@ -647,7 +701,6 @@ setup_dialog (GsmPropertiesDialog *dialog) NULL); gtk_tree_view_append_column (treeview, column); - gtk_tree_view_column_set_sort_column_id (column, STORE_COL_DESCRIPTION); gtk_tree_view_set_search_column (treeview, STORE_COL_SEARCH); @@ -692,7 +745,6 @@ setup_dialog (GsmPropertiesDialog *dialog) STORE_COL_DESCRIPTION, GTK_SORT_ASCENDING); - button = GTK_WIDGET (gtk_builder_get_object (dialog->xml, CAPPLET_ADD_WIDGET_NAME)); dialog->add_button = button; @@ -702,6 +754,14 @@ setup_dialog (GsmPropertiesDialog *dialog) dialog); button = GTK_WIDGET (gtk_builder_get_object (dialog->xml, + CAPPLET_DESKTOP_ADD_WIDGET_NAME)); + dialog->desktop_add_button = button; + g_signal_connect (button, + "clicked", + G_CALLBACK (on_desktop_add_app_clicked), + dialog); + + button = GTK_WIDGET (gtk_builder_get_object (dialog->xml, CAPPLET_DELETE_WIDGET_NAME)); dialog->delete_button = button; g_signal_connect (button, @@ -717,9 +777,6 @@ setup_dialog (GsmPropertiesDialog *dialog) G_CALLBACK (on_edit_app_clicked), dialog); - - dialog->settings = g_settings_new (SPC_CONFIG_SCHEMA); - button = GTK_WIDGET (gtk_builder_get_object (dialog->xml, CAPPLET_REMEMBER_WIDGET_NAME)); @@ -727,17 +784,6 @@ setup_dialog (GsmPropertiesDialog *dialog) button, "active", G_SETTINGS_BIND_DEFAULT); button = GTK_WIDGET (gtk_builder_get_object (dialog->xml, - CAPPLET_SHOW_HIDDEN_WIDGET_NAME)); - - g_settings_bind (dialog->settings, SPC_SHOW_HIDDEN_KEY, - button, "active", G_SETTINGS_BIND_DEFAULT); - - g_signal_connect (button, - "clicked", - G_CALLBACK (on_show_hidden_clicked), - dialog); - - button = GTK_WIDGET (gtk_builder_get_object (dialog->xml, CAPPLET_SAVE_WIDGET_NAME)); g_signal_connect (button, "clicked", @@ -752,7 +798,7 @@ setup_dialog (GsmPropertiesDialog *dialog) G_CALLBACK (_app_removed), dialog); populate_model (dialog); - update_tree_view (dialog); + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (dialog->tree_filter)); } static GObject * |