debugwin: Make filter options into popover when available.

Wed, 13 Jun 2018 18:16:50 -0400

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Wed, 13 Jun 2018 18:16:50 -0400
changeset 39163
c38b26076992
parent 39162
e84a120599f7
child 39164
d4573bd02c98

debugwin: Make filter options into popover when available.

pidgin/pidgindebug.c file | annotate | diff | comparison | revisions
pidgin/resources/Debug/filter-popover.ui file | annotate | diff | comparison | revisions
pidgin/resources/pidgin.gresource.xml file | annotate | diff | comparison | revisions
--- a/pidgin/pidgindebug.c	Wed Jun 13 17:53:20 2018 -0400
+++ b/pidgin/pidgindebug.c	Wed Jun 13 18:16:50 2018 -0400
@@ -64,6 +64,9 @@
 
 	gboolean paused;
 
+#if GTK_CHECK_VERSION(3,12,0)
+	GtkWidget *popover;
+#endif
 	gboolean invert;
 	gboolean highlight;
 	GRegex *regex;
@@ -392,7 +395,11 @@
 regex_menu_cb(GtkWidget *item, const gchar *pref) {
 	gboolean active;
 
+#if GTK_CHECK_VERSION(3,12,0)
+	active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(item));
+#else
 	active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item));
+#endif
 
 	purple_prefs_set_bool(pref, active);
 }
@@ -401,6 +408,12 @@
 regex_popup_cb(GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event,
 		PidginDebugWindow *win)
 {
+#if GTK_CHECK_VERSION(3,12,0)
+	GdkRectangle rect;
+	gtk_entry_get_icon_area(entry, icon_pos, &rect);
+	gtk_popover_set_pointing_to(GTK_POPOVER(win->popover), &rect);
+	gtk_popover_popup(GTK_POPOVER(win->popover));
+#else
 	GtkWidget *menu;
 
 	menu = gtk_menu_new();
@@ -413,6 +426,7 @@
 
 	gtk_menu_popup_at_widget(GTK_MENU(menu), GTK_WIDGET(entry),
 			GDK_GRAVITY_SOUTH_WEST, GDK_GRAVITY_NORTH_WEST, event);
+#endif
 }
 
 static void
@@ -585,6 +599,11 @@
 			"background-image: none;"
 			"background-color: @success_color;"
 		"}";
+#if GTK_CHECK_VERSION(3,12,0)
+	GtkBuilder *builder;
+	GtkWidget *popover_invert;
+	GtkWidget *popover_highlight;
+#endif
 
 	gtk_widget_init_template(GTK_WIDGET(win));
 
@@ -648,6 +667,33 @@
 
 		purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/debug/filterlevel",
 						filter_level_pref_changed, win);
+
+#if GTK_CHECK_VERSION(3,12,0)
+		builder = gtk_builder_new_from_resource(
+				"/im/pidgin/Pidgin/Debug/filter-popover.ui");
+		win->popover = GTK_WIDGET(gtk_builder_get_object(builder,
+					"popover"));
+		gtk_popover_set_relative_to(GTK_POPOVER(win->popover),
+				win->expression);
+
+		popover_invert = GTK_WIDGET(gtk_builder_get_object(builder,
+					"popover.invert"));
+		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(popover_invert),
+				win->invert);
+		g_signal_connect(G_OBJECT(popover_invert), "toggled",
+				G_CALLBACK(regex_menu_cb),
+				PIDGIN_PREFS_ROOT "/debug/invert");
+
+		popover_highlight = GTK_WIDGET(gtk_builder_get_object(builder,
+					"popover.highlight"));
+		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(popover_highlight),
+				win->highlight);
+		g_signal_connect(G_OBJECT(popover_highlight), "toggled",
+				G_CALLBACK(regex_menu_cb),
+				PIDGIN_PREFS_ROOT "/debug/highlight");
+
+		g_object_unref(builder);
+#endif
 	}
 
 	/* The *start* and *end* marks bound the beginning and end of an
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/resources/Debug/filter-popover.ui	Wed Jun 13 18:16:50 2018 -0400
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface>
+  <requires lib="gtk+" version="3.12"/>
+  <object class="GtkPopover" id="popover">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkCheckButton" id="popover.invert">
+            <property name="label" translatable="yes">Invert</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="draw_indicator">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkCheckButton" id="popover.highlight">
+            <property name="label" translatable="yes">Highlight matches</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="draw_indicator">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
--- a/pidgin/resources/pidgin.gresource.xml	Wed Jun 13 17:53:20 2018 -0400
+++ b/pidgin/resources/pidgin.gresource.xml	Wed Jun 13 18:16:50 2018 -0400
@@ -6,5 +6,6 @@
     <file compressed="true">About/about.html</file>
     <file compressed="true">About/credits.json</file>
     <file compressed="true">Debug/debug.ui</file>
+    <file compressed="true">Debug/filter-popover.ui</file>
   </gresource>
 </gresources>

mercurial