qulogic/talkatu

Change demo's author selection to a popover.

2019-07-30, Elliott Sales de Andrade
a723ce8334b0
Parents 8cc135e7fcc4
Children c21412136b32
Change demo's author selection to a popover.

No point having two buttons for this when one will do.
--- a/demo/data/demo.ui Mon Jul 29 23:30:12 2019 -0400
+++ b/demo/data/demo.ui Tue Jul 30 01:18:14 2019 -0400
@@ -2,77 +2,7 @@
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="Talkatu" version="0.0"/>
- <requires lib="gtk+" version="3.10"/>
- <object class="GtkMenu" id="author_menu">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkRadioMenuItem" id="author_menu_item">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Alice</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <property name="draw_as_radio">True</property>
- <signal name="activate" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkRadioMenuItem">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Bob</property>
- <property name="use_underline">True</property>
- <property name="draw_as_radio">True</property>
- <property name="group">author_menu_item</property>
- <signal name="activate" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkRadioMenuItem">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Carlos</property>
- <property name="use_underline">True</property>
- <property name="draw_as_radio">True</property>
- <property name="group">author_menu_item</property>
- <signal name="activate" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkRadioMenuItem">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Eve</property>
- <property name="use_underline">True</property>
- <property name="draw_as_radio">True</property>
- <property name="group">author_menu_item</property>
- <signal name="activate" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkRadioMenuItem">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">David</property>
- <property name="use_underline">True</property>
- <property name="draw_as_radio">True</property>
- <property name="group">author_menu_item</property>
- <signal name="activate" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkRadioMenuItem">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Mallory</property>
- <property name="use_underline">True</property>
- <property name="draw_as_radio">True</property>
- <property name="group">author_menu_item</property>
- <signal name="activate" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
- </object>
- </child>
- </object>
+ <requires lib="gtk+" version="3.18"/>
<object class="TalkatuTagTable" id="table_history"/>
<object class="TalkatuHistoryBuffer" id="buffer_history">
<property name="tag_table">table_history</property>
@@ -249,12 +179,13 @@
</packing>
</child>
<child>
- <object class="GtkMenuToolButton" id="author_button">
+ <object class="GtkToggleToolButton" id="author_button">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Author</property>
<property name="use_underline">True</property>
<property name="icon_name">system-users</property>
+ <signal name="toggled" handler="talkatu_demo_window_author_toggled_cb" object="author_popover" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@@ -349,6 +280,115 @@
</object>
</child>
</template>
+ <object class="GtkPopover" id="author_popover">
+ <property name="can_focus">False</property>
+ <property name="relative_to">author_button</property>
+ <signal name="closed" handler="talkatu_demo_window_author_popover_closed_cb" object="author_button" swapped="no"/>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkRadioButton" id="author_item">
+ <property name="label" translatable="yes">Alice</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton">
+ <property name="label" translatable="yes">Bob</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">author_item</property>
+ <signal name="toggled" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton">
+ <property name="label" translatable="yes">Carol</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">author_item</property>
+ <signal name="toggled" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton">
+ <property name="label" translatable="yes">David</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">author_item</property>
+ <signal name="toggled" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton">
+ <property name="label" translatable="yes">Eve</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">author_item</property>
+ <signal name="toggled" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton">
+ <property name="label" translatable="yes">Mallory</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">author_item</property>
+ <signal name="toggled" handler="talkatu_demo_window_author_changed" object="TalkatuDemoWindow" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
<object class="TalkatuWholeBuffer" id="buffer_whole">
<property name="tag_table">table_plain</property>
<property name="style">whole</property>
--- a/demo/talkatudemowindow.c Mon Jul 29 23:30:12 2019 -0400
+++ b/demo/talkatudemowindow.c Tue Jul 30 01:18:14 2019 -0400
@@ -42,8 +42,8 @@
GtkTextBuffer *buffer_history;
GtkWidget *author_button;
- GtkWidget *author_menu;
- GtkWidget *author_menu_item;
+ GtkWidget *author_popover;
+ GtkWidget *author_item;
gchar *author;
};
@@ -230,11 +230,31 @@
}
static void
-talkatu_demo_window_author_changed(GtkMenuItem *item, gpointer data) {
+talkatu_demo_window_author_toggled_cb(GtkToolButton *button, gpointer data) {
+ GtkPopover *popover = GTK_POPOVER(data);
+
+#if GTK_CHECK_VERSION(3,22,0)
+ gtk_popover_popup(popover);
+#else
+ gtk_widget_show(popover);
+#endif
+}
+
+static void
+talkatu_demo_window_author_popover_closed_cb(GtkPopover *popover, gpointer data) {
+ GtkToggleToolButton *button = GTK_TOGGLE_TOOL_BUTTON(data);
+
+ gtk_toggle_tool_button_set_active(button, FALSE);
+}
+
+static void
+talkatu_demo_window_author_changed(GtkRadioButton *item, gpointer data) {
TalkatuDemoWindow *window = TALKATU_DEMO_WINDOW(data);
- g_free(window->author);
- window->author = g_strdup(gtk_menu_item_get_label(item));
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(item))) {
+ g_free(window->author);
+ window->author = g_strdup(gtk_button_get_label(GTK_BUTTON(item)));
+ }
}
/******************************************************************************
@@ -246,12 +266,10 @@
gtk_text_view_set_buffer(GTK_TEXT_VIEW(window->view_history), window->buffer_history);
- gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(window->author_button), window->author_menu);
-
/* activate the first menu item to make sure its label gets stored
* correctly.
*/
- gtk_menu_item_activate(GTK_MENU_ITEM(window->author_menu_item));
+ talkatu_demo_window_author_changed(GTK_RADIO_BUTTON(window->author_item), window);
g_object_bind_property(
window->editor, "show-toolbar",
@@ -290,8 +308,8 @@
gtk_widget_class_bind_template_child(widget_class, TalkatuDemoWindow, toggle_markdown);
gtk_widget_class_bind_template_child(widget_class, TalkatuDemoWindow, author_button);
- gtk_widget_class_bind_template_child(widget_class, TalkatuDemoWindow, author_menu);
- gtk_widget_class_bind_template_child(widget_class, TalkatuDemoWindow, author_menu_item);
+ gtk_widget_class_bind_template_child(widget_class, TalkatuDemoWindow, author_popover);
+ gtk_widget_class_bind_template_child(widget_class, TalkatuDemoWindow, author_item);
gtk_widget_class_bind_template_child(widget_class, TalkatuDemoWindow, toggle_toolbar);
gtk_widget_class_bind_template_child(widget_class, TalkatuDemoWindow, toggle_send_button);
@@ -304,6 +322,8 @@
gtk_widget_class_bind_template_callback(widget_class, talkatu_demo_window_insert_html_cb);
gtk_widget_class_bind_template_callback(widget_class, talkatu_demo_window_insert_markdown_cb);
+ gtk_widget_class_bind_template_callback(widget_class, talkatu_demo_window_author_toggled_cb);
+ gtk_widget_class_bind_template_callback(widget_class, talkatu_demo_window_author_popover_closed_cb);
gtk_widget_class_bind_template_callback(widget_class, talkatu_demo_window_author_changed);
}