summaryrefslogtreecommitdiff
path: root/capplet/gsm-properties-dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'capplet/gsm-properties-dialog.c')
-rw-r--r--capplet/gsm-properties-dialog.c160
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 *