From 77fb1c1f8f3f2856f9c991198cb231f22d19b40e Mon Sep 17 00:00:00 2001 From: Jason Conti Date: Fri, 30 Aug 2019 23:23:53 -0400 Subject: Add mate do-not-disturb option if available. --- src/indicator-notifications-settings.c | 107 +++++++++++++++++++++++++-------- 1 file changed, 83 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/indicator-notifications-settings.c b/src/indicator-notifications-settings.c index b01a709..4a36f52 100644 --- a/src/indicator-notifications-settings.c +++ b/src/indicator-notifications-settings.c @@ -13,6 +13,9 @@ #define SCHEMA_KEY "schema-key" +#define MATE_SCHEMA "org.mate.NotificationDaemon" +#define MATE_KEY_DND "do-not-disturb" + #define COLUMN_APPNAME 0 typedef struct @@ -51,6 +54,11 @@ static gboolean foreach_check_duplicates(GtkTreeModel *model, GtkTreePath *path, static gboolean foreach_build_array(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data); +/* Mate Functions */ +static gboolean has_mate_dnd(); +static gboolean get_mate_dnd(); +static void mate_dnd_button_toggled_cb(GtkToggleButton *button, gpointer user_data); + /* Callbacks */ static void blacklist_add_clicked_cb(GtkButton *button, gpointer user_data); static void blacklist_remove_clicked_cb(GtkButton *button, gpointer user_data); @@ -147,6 +155,47 @@ foreach_build_array(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, g return FALSE; } +static gboolean +has_mate_dnd() +{ + /* Check if we can access the mate do-not-disturb key */ + GSettingsSchemaSource *source = g_settings_schema_source_get_default(); + if (source == NULL) { + return FALSE; + } + + /* Lookup the schema */ + GSettingsSchema *schema = g_settings_schema_source_lookup(source, MATE_SCHEMA, FALSE); + + /* Couldn't find the schema */ + if (schema == NULL) { + return FALSE; + } + + /* Found the schema, make sure we have the do-not-disturb key */ + gboolean result = g_settings_schema_has_key(schema, MATE_KEY_DND); + g_settings_schema_unref(schema); + + return result; +} + +static gboolean +get_mate_dnd() +{ + GSettings *settings = g_settings_new(MATE_SCHEMA); + gboolean result = g_settings_get_boolean(settings, MATE_KEY_DND); + g_object_unref(settings); + return result; +} + +static void +mate_dnd_button_toggled_cb(GtkToggleButton *button, gpointer user_data) +{ + GSettings *settings = g_settings_new(MATE_SCHEMA); + g_settings_set_boolean(settings, MATE_KEY_DND, gtk_toggle_button_get_active(button)); + g_object_unref(settings); +} + static void blacklist_add_clicked_cb(GtkButton *button, gpointer user_data) { @@ -228,8 +277,9 @@ indicator_notifications_settings_activate(GApplication *app) GtkWidget *window; GtkWidget *frame; GtkWidget *vbox; - GtkWidget *button_1; - GtkWidget *button_2; + GtkWidget *button_cmc; + GtkWidget *button_hide_ind; + GtkWidget *button_mate_dnd; GtkWidget *spin; GtkWidget *spin_label; GtkWidget *blacklist_label; @@ -238,8 +288,8 @@ indicator_notifications_settings_activate(GApplication *app) GtkTreeViewColumn *column; GtkCellRenderer *renderer; GtkWidget *hbox; - GtkWidget *button_3; - GtkWidget *button_4; + GtkWidget *button_blacklist_rem; + GtkWidget *button_blacklist_add; GtkEntryCompletion *entry_completion; GtkListStore *entry_list; @@ -274,22 +324,31 @@ indicator_notifications_settings_activate(GApplication *app) gtk_widget_show(vbox); /* clear-on-middle-click */ - button_1 = gtk_check_button_new_with_label(_("Clear notifications on middle click")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button_1), + button_cmc = gtk_check_button_new_with_label(_("Clear notifications on middle click")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button_cmc), g_settings_get_boolean(self->settings, NOTIFICATIONS_KEY_CLEAR_MC)); - g_object_set_data(G_OBJECT(button_1), SCHEMA_KEY, NOTIFICATIONS_KEY_CLEAR_MC); - g_signal_connect(button_1, "toggled", G_CALLBACK(button_toggled_cb), self->settings); - gtk_box_pack_start(GTK_BOX(vbox), button_1, FALSE, FALSE, 4); - gtk_widget_show(button_1); + g_object_set_data(G_OBJECT(button_cmc), SCHEMA_KEY, NOTIFICATIONS_KEY_CLEAR_MC); + g_signal_connect(button_cmc, "toggled", G_CALLBACK(button_toggled_cb), self->settings); + gtk_box_pack_start(GTK_BOX(vbox), button_cmc, FALSE, FALSE, 4); + gtk_widget_show(button_cmc); /* hide-indicator */ - button_2 = gtk_check_button_new_with_label(_("Hide indicator")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button_2), + button_hide_ind = gtk_check_button_new_with_label(_("Hide indicator")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button_hide_ind), g_settings_get_boolean(self->settings, NOTIFICATIONS_KEY_HIDE_INDICATOR)); - g_object_set_data(G_OBJECT(button_2), SCHEMA_KEY, NOTIFICATIONS_KEY_HIDE_INDICATOR); - g_signal_connect(button_2, "toggled", G_CALLBACK(button_toggled_cb), self->settings); - gtk_box_pack_start(GTK_BOX(vbox), button_2, FALSE, FALSE, 4); - gtk_widget_show(button_2); + g_object_set_data(G_OBJECT(button_hide_ind), SCHEMA_KEY, NOTIFICATIONS_KEY_HIDE_INDICATOR); + g_signal_connect(button_hide_ind, "toggled", G_CALLBACK(button_toggled_cb), self->settings); + gtk_box_pack_start(GTK_BOX(vbox), button_hide_ind, FALSE, FALSE, 4); + gtk_widget_show(button_hide_ind); + + /* mate do-not-disturb */ + if (has_mate_dnd()) { + button_mate_dnd = gtk_check_button_new_with_label(_("Mate Desktop Do Not Disturb")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button_mate_dnd), get_mate_dnd()); + g_signal_connect(button_mate_dnd, "toggled", G_CALLBACK(mate_dnd_button_toggled_cb), NULL); + gtk_box_pack_start(GTK_BOX(vbox), button_mate_dnd, FALSE, FALSE, 4); + gtk_widget_show(button_mate_dnd); + } /* max-items */ /* FIXME: indicator does not change max items until restart... */ @@ -329,15 +388,15 @@ indicator_notifications_settings_activate(GApplication *app) gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); - button_3 = gtk_button_new_with_label(_("Remove")); - g_signal_connect(button_3, "clicked", G_CALLBACK(blacklist_remove_clicked_cb), self); - gtk_box_pack_start(GTK_BOX(hbox), button_3, FALSE, FALSE, 2); - gtk_widget_show(button_3); + button_blacklist_rem = gtk_button_new_with_label(_("Remove")); + g_signal_connect(button_blacklist_rem, "clicked", G_CALLBACK(blacklist_remove_clicked_cb), self); + gtk_box_pack_start(GTK_BOX(hbox), button_blacklist_rem, FALSE, FALSE, 2); + gtk_widget_show(button_blacklist_rem); - button_4 = gtk_button_new_with_label(_("Add")); - g_signal_connect(button_4, "clicked", G_CALLBACK(blacklist_add_clicked_cb), self); - gtk_box_pack_start(GTK_BOX(hbox), button_4, FALSE, FALSE, 2); - gtk_widget_show(button_4); + button_blacklist_add = gtk_button_new_with_label(_("Add")); + g_signal_connect(button_blacklist_add, "clicked", G_CALLBACK(blacklist_add_clicked_cb), self); + gtk_box_pack_start(GTK_BOX(hbox), button_blacklist_add, FALSE, FALSE, 2); + gtk_widget_show(button_blacklist_add); self->blacklist_entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), self->blacklist_entry, TRUE, TRUE, 0); -- cgit v1.2.3