From 5e7ff518c12de6665bad24650e555b2c3b2304d0 Mon Sep 17 00:00:00 2001 From: Olivier Duchateau Date: Sat, 25 Oct 2014 17:43:49 +0000 Subject: [PATCH] Add 'Hidden' option in exo desktop item editor. --- exo-desktop-item-edit/exo-die-desktop-model.c | 7 +++ exo-desktop-item-edit/exo-die-desktop-model.h | 2 + exo-desktop-item-edit/exo-die-editor.c | 77 ++++++++++++++++++++++++++- exo-desktop-item-edit/exo-die-editor.h | 4 ++ exo-desktop-item-edit/main.c | 6 +++ 5 files changed, 95 insertions(+), 1 deletion(-) diff --git a/exo-desktop-item-edit/exo-die-desktop-model.c b/exo-desktop-item-edit/exo-die-desktop-model.c index a74c85a..b2e1c8f 100644 --- a/exo-desktop-item-edit/exo-die-desktop-model.c +++ b/exo-desktop-item-edit/exo-die-desktop-model.c @@ -104,6 +104,7 @@ struct _ExoDieDesktopItem gchar *name; guint snotify : 1; guint terminal : 1; + guint hidden : 1; }; @@ -217,6 +218,7 @@ exo_die_desktop_model_get_column_type (GtkTreeModel *tree_model, case EXO_DIE_DESKTOP_MODEL_COLUMN_SNOTIFY: case EXO_DIE_DESKTOP_MODEL_COLUMN_TERMINAL: + case EXO_DIE_DESKTOP_MODEL_COLUMN_HIDDEN: return G_TYPE_BOOLEAN; default: @@ -319,6 +321,11 @@ exo_die_desktop_model_get_value (GtkTreeModel *tree_model, g_value_set_boolean (value, desktop_item->terminal); break; + case EXO_DIE_DESKTOP_MODEL_COLUMN_HIDDEN: + g_value_init (value, G_TYPE_BOOLEAN); + g_value_set_boolean (value, desktop_item->hidden); + break; + default: g_assert_not_reached (); break; diff --git a/exo-desktop-item-edit/exo-die-desktop-model.h b/exo-desktop-item-edit/exo-die-desktop-model.h index c8c5540..e629106 100644 --- a/exo-desktop-item-edit/exo-die-desktop-model.h +++ b/exo-desktop-item-edit/exo-die-desktop-model.h @@ -43,6 +43,7 @@ typedef struct _ExoDieDesktopModel ExoDieDesktopModel; * @EXO_DIE_DESKTOP_MODEL_COLUMN_NAME : the column with the application name. * @EXO_DIE_DESKTOP_MODEL_COLUMN_SNOTIFY : the column with the applications StartupNotify setting. * @EXO_DIE_DESKTOP_MODEL_COLUMN_TERMINAL : the column with the applications Terminal setting. + * @EXO_DIE_DESKTOP_MODEL_COLUMN_HIDDEN : the column with the applications Hidden setting. * * The columns provided by the #ExoDieDesktopModel. **/ @@ -55,6 +56,7 @@ typedef enum /*< enum >*/ EXO_DIE_DESKTOP_MODEL_COLUMN_NAME, EXO_DIE_DESKTOP_MODEL_COLUMN_SNOTIFY, EXO_DIE_DESKTOP_MODEL_COLUMN_TERMINAL, + EXO_DIE_DESKTOP_MODEL_COLUMN_HIDDEN, EXO_DIE_DESKTOP_MODEL_N_COLUMNS, } ExoDieDesktopModelColumn; diff --git a/exo-desktop-item-edit/exo-die-editor.c b/exo-desktop-item-edit/exo-die-editor.c index 33fd09d..01ed8b0 100644 --- a/exo-desktop-item-edit/exo-die-editor.c +++ b/exo-desktop-item-edit/exo-die-editor.c @@ -41,6 +41,7 @@ enum PROP_PATH, PROP_SNOTIFY, PROP_TERMINAL, + PROP_HIDDEN, }; @@ -89,6 +90,7 @@ struct _ExoDieEditor gchar *path; guint snotify : 1; guint terminal : 1; + guint hidden : 1; }; @@ -240,6 +242,19 @@ exo_die_editor_class_init (ExoDieEditorClass *klass) "terminal", FALSE, EXO_PARAM_READWRITE)); + + /** + * ExoDieEditor:hidden: + * + * Hide desktop item in menu. + **/ + g_object_class_install_property (gobject_class, + PROP_HIDDEN, + g_param_spec_boolean ("hidden", + "hidden", + "hidden", + FALSE, + EXO_PARAM_READWRITE)); } @@ -287,7 +302,7 @@ exo_die_editor_init (ExoDieEditor *editor) editor->path = g_strdup (""); /* configure the table */ - gtk_table_resize (GTK_TABLE (editor), 8, 2); + gtk_table_resize (GTK_TABLE (editor), 9, 2); gtk_table_set_col_spacings (GTK_TABLE (editor), 12); gtk_table_set_row_spacings (GTK_TABLE (editor), 0); @@ -436,6 +451,14 @@ exo_die_editor_init (ExoDieEditor *editor) exo_mutual_binding_new (G_OBJECT (editor), "terminal", G_OBJECT (button), "active"); exo_binding_new_full (G_OBJECT (editor), "mode", G_OBJECT (button), "visible", exo_die_true_if_application, NULL, NULL); gtk_table_attach (GTK_TABLE (editor), button, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3); + + row += 1; + + /* Hidden button */ + button = gtk_check_button_new_with_label (_("Hide from menus")); + exo_mutual_binding_new (G_OBJECT (editor), "hidden", G_OBJECT (button), "active"); + exo_binding_new_full (G_OBJECT (editor), "mode", G_OBJECT (button), "visible", exo_die_true_if_application, NULL, NULL); + gtk_table_attach (GTK_TABLE (editor), button, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3); } @@ -508,6 +531,10 @@ exo_die_editor_get_property (GObject *object, g_value_set_boolean (value, exo_die_editor_get_terminal (editor)); break; + case PROP_HIDDEN: + g_value_set_boolean (value, exo_die_editor_get_hidden (editor)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -562,6 +589,10 @@ exo_die_editor_set_property (GObject *object, exo_die_editor_set_terminal (editor, g_value_get_boolean (value)); break; + case PROP_HIDDEN: + exo_die_editor_set_hidden (editor, g_value_get_boolean (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -674,6 +705,7 @@ exo_die_editor_match_selected (GtkEntryCompletion *completion, ExoDieEditor *editor = EXO_DIE_EDITOR (user_data); gboolean terminal; gboolean snotify; + gboolean hidden; gchar *comment; gchar *command; gchar *icon; @@ -691,6 +723,7 @@ exo_die_editor_match_selected (GtkEntryCompletion *completion, EXO_DIE_DESKTOP_MODEL_COLUMN_NAME, &name, EXO_DIE_DESKTOP_MODEL_COLUMN_SNOTIFY, &snotify, EXO_DIE_DESKTOP_MODEL_COLUMN_TERMINAL, &terminal, + EXO_DIE_DESKTOP_MODEL_COLUMN_HIDDEN, &hidden, -1); /* apply the settings to the editor */ @@ -700,6 +733,7 @@ exo_die_editor_match_selected (GtkEntryCompletion *completion, exo_die_editor_set_icon (editor, (icon != NULL) ? icon : ""); exo_die_editor_set_snotify (editor, snotify); exo_die_editor_set_terminal (editor, terminal); + exo_die_editor_set_hidden (editor, hidden); exo_die_editor_set_path (editor, ""); /* cleanup */ @@ -1333,5 +1367,46 @@ exo_die_editor_set_terminal (ExoDieEditor *editor, +/** + * exo_die_editor_get_hidden: + * @editor : an #ExoDieEditor. + * + * Returns %TRUE if the desktop item should be hidden, only valid + * if mode for @editor is %EXO_DIE_EDITOR_MODE_APPLICATION. + * + * Return value: %TRUE if desktop item should be hidden. + **/ +gboolean +exo_die_editor_get_hidden (ExoDieEditor *editor) +{ + g_return_val_if_fail (EXO_DIE_IS_EDITOR (editor), FALSE); + return editor->hidden; +} + + + +/** + * exo_die_editor_set_hidden: + * @editor : an #ExoDieEditor. + * @hidden : %TRUE hide desktop item. + * + **/ +void +exo_die_editor_set_hidden (ExoDieEditor *editor, + gboolean hidden) +{ + g_return_if_fail (EXO_DIE_IS_EDITOR (editor)); + + /* normalize the value */ + hidden = !!hidden; + /* check if we have a new value */ + if (editor->hidden != hidden) + { + /* apply the new value */ + editor->hidden = hidden; + /* notify listeners */ + g_object_notify (G_OBJECT (editor), "hidden"); + } +} diff --git a/exo-desktop-item-edit/exo-die-editor.h b/exo-desktop-item-edit/exo-die-editor.h index 6ae187c..949c7ad 100644 --- a/exo-desktop-item-edit/exo-die-editor.h +++ b/exo-desktop-item-edit/exo-die-editor.h @@ -76,6 +76,10 @@ gboolean exo_die_editor_get_terminal (ExoDieEditor *editor); void exo_die_editor_set_terminal (ExoDieEditor *editor, gboolean terminal); +gboolean exo_die_editor_get_hidden (ExoDieEditor *editor); +void exo_die_editor_set_hidden (ExoDieEditor *editor, + gboolean hidden); + G_END_DECLS; #endif /* !__EXO_DIE_EDITOR_H__ */ diff --git a/exo-desktop-item-edit/main.c b/exo-desktop-item-edit/main.c index 29d6b8f..aff24f9 100644 --- a/exo-desktop-item-edit/main.c +++ b/exo-desktop-item-edit/main.c @@ -400,6 +400,9 @@ main (int argc, char **argv) exo_die_editor_set_terminal (EXO_DIE_EDITOR (editor), g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_TERMINAL, NULL)); + exo_die_editor_set_hidden (EXO_DIE_EDITOR (editor), + g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, + G_KEY_FILE_DESKTOP_KEY_HIDDEN, NULL)); break; case EXO_DIE_EDITOR_MODE_LINK: @@ -483,6 +486,9 @@ main (int argc, char **argv) g_key_file_set_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY, exo_die_editor_get_snotify (EXO_DIE_EDITOR (editor))); + g_key_file_set_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, + G_KEY_FILE_DESKTOP_KEY_HIDDEN, + exo_die_editor_get_hidden (EXO_DIE_EDITOR (editor))); break; case EXO_DIE_EDITOR_MODE_LINK: -- 2.1.2