Merge lp:~alexgleason/midori/fix-bug893788 into lp:midori

Proposed by Alex Gleason
Status: Merged
Approved by: Cris Dywan
Approved revision: 6931
Merged at revision: 6934
Proposed branch: lp:~alexgleason/midori/fix-bug893788
Merge into: lp:midori
Diff against target: 103 lines (+66/-1)
1 file modified
midori/midori-privatedata.c (+66/-1)
To merge this branch: bzr merge lp:~alexgleason/midori/fix-bug893788
Reviewer Review Type Date Requested Status
gue5t gue5t Approve
Review via email: mp+256417@code.launchpad.net

Commit message

only make Clear Private Data dialog's button sensitive when items are selected to clear

To post a comment you must log in.
Revision history for this message
gue5t gue5t (gue5t) wrote :

The code is nice and clean, and works in testing. Thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'midori/midori-privatedata.c'
2--- midori/midori-privatedata.c 2014-07-11 01:36:48 +0000
3+++ midori/midori-privatedata.c 2015-04-16 02:11:25 +0000
4@@ -95,6 +95,64 @@
5 g_object_set (settings, "clear-private-data", clear_prefs, NULL);
6 }
7
8+/**
9+ * The dialog is "empty" when none of the relevant checkboxes are activated.
10+ * This function returns true if the dialog is empty.
11+ **/
12+static bool
13+midori_private_data_dialog_is_empty (GtkDialog* dialog)
14+{
15+ GtkToggleButton* button;
16+ gint count = 0; // Counts the total number of checked boxes
17+ GList* data_items = midori_private_data_register_item (NULL, NULL, NULL);
18+
19+ // Count these first two special ones
20+ button = g_object_get_data (G_OBJECT (dialog), "session");
21+ if (gtk_toggle_button_get_active (button))
22+ count++;
23+ button = g_object_get_data (G_OBJECT (dialog), "history");
24+ if (gtk_toggle_button_get_active (button))
25+ count++;
26+
27+ // Count each other one
28+ for (; data_items != NULL; data_items = g_list_next (data_items))
29+ {
30+ MidoriPrivateDataItem* privacy = data_items->data;
31+ button = g_object_get_data (G_OBJECT (dialog), privacy->name);
32+ g_return_if_fail (button != NULL && GTK_IS_TOGGLE_BUTTON (button));
33+ if (gtk_toggle_button_get_active (button))
34+ count++;
35+ }
36+
37+ // No checked boxes means the dialog is empty
38+ if (count == 0)
39+ return true;
40+ return false;
41+}
42+
43+/**
44+ * When called, sets the sensitivity of the clear private data button depending
45+ * on whether the dialog is empty (see: midori_private_data_dialog_is_empty)
46+ **/
47+static void
48+midori_private_data_clear_button_check_sensitive (GtkDialog* dialog)
49+{
50+ GtkWidget* clear_button;
51+ clear_button = gtk_dialog_get_widget_for_response (dialog, GTK_RESPONSE_ACCEPT);
52+ if (midori_private_data_dialog_is_empty (dialog))
53+ gtk_widget_set_sensitive (clear_button, FALSE);
54+ else
55+ gtk_widget_set_sensitive (clear_button, TRUE);
56+}
57+
58+static void
59+midori_private_data_checkbox_toggled_cb (GtkToggleButton* button,
60+ GtkWidget* dialog)
61+{
62+ // This is a separate function so I can invoke it on start too
63+ midori_private_data_clear_button_check_sensitive (GTK_DIALOG (dialog));
64+}
65+
66 GtkWidget*
67 midori_private_data_get_dialog (MidoriBrowser* browser)
68 {
69@@ -150,12 +208,16 @@
70 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
71 g_object_set_data (G_OBJECT (dialog), "session", button);
72 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
73+ g_signal_connect (button, "toggled",
74+ G_CALLBACK (midori_private_data_checkbox_toggled_cb), dialog);
75 /* i18n: Browsing history, visited web pages, closed tabs */
76 button = gtk_check_button_new_with_mnemonic (_("_History"));
77 if ((clear_prefs & MIDORI_CLEAR_HISTORY) == MIDORI_CLEAR_HISTORY)
78 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
79 g_object_set_data (G_OBJECT (dialog), "history", button);
80 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
81+ g_signal_connect (button, "toggled",
82+ G_CALLBACK (midori_private_data_checkbox_toggled_cb), dialog);
83
84 data_items = midori_private_data_register_item (NULL, NULL, NULL);
85 for (; data_items != NULL; data_items = g_list_next (data_items))
86@@ -166,7 +228,10 @@
87 g_object_set_data (G_OBJECT (dialog), privacy->name, button);
88 if (clear_data && strstr (clear_data, privacy->name))
89 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
90+ g_signal_connect (button, "toggled",
91+ G_CALLBACK (midori_private_data_checkbox_toggled_cb), dialog);
92 }
93+ midori_private_data_clear_button_check_sensitive (GTK_DIALOG (dialog));
94 g_free (clear_data);
95 gtk_container_add (GTK_CONTAINER (alignment), vbox);
96 gtk_box_pack_start (GTK_BOX (hbox), alignment, TRUE, TRUE, 4);
97@@ -382,4 +447,4 @@
98 item->clear = clear;
99 items = g_list_append (items, item);
100 return NULL;
101-}
102\ No newline at end of file
103+}

Subscribers

People subscribed via source and target branches

to all changes: