aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJason Conti <jason.conti@gmail.com>2019-08-30 23:23:53 -0400
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2020-08-20 14:38:04 +0200
commit77fb1c1f8f3f2856f9c991198cb231f22d19b40e (patch)
tree637a9296bf0648ac263269346d4ae80d8c2c6b1a /src
parente4bf77f46267730d5c2e771b5dcef6a338eaf88e (diff)
downloadayatana-indicator-notifications-77fb1c1f8f3f2856f9c991198cb231f22d19b40e.tar.gz
ayatana-indicator-notifications-77fb1c1f8f3f2856f9c991198cb231f22d19b40e.tar.bz2
ayatana-indicator-notifications-77fb1c1f8f3f2856f9c991198cb231f22d19b40e.zip
Add mate do-not-disturb option if available.
Diffstat (limited to 'src')
-rw-r--r--src/indicator-notifications-settings.c107
1 files changed, 83 insertions, 24 deletions
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);