[devhelp/wip/book-tree-collapse-all] BookTree: add context menu with Collapse All action
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [devhelp/wip/book-tree-collapse-all] BookTree: add context menu with Collapse All action
- Date: Fri, 5 May 2017 14:33:43 +0000 (UTC)
commit fae8f84370625b2afedcad27688327fec4c24e9c
Author: Sébastien Wilmet <swilmet gnome org>
Date: Fri May 5 16:10:30 2017 +0200
BookTree: add context menu with Collapse All action
I hesitated between adding a toolbar above the BookTree with the action,
or a context menu. But there is currently only one action, so the
toolbar would be quite empty.
https://bugzilla.gnome.org/show_bug.cgi?id=761292
src/dh-book-tree.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 60 insertions(+), 0 deletions(-)
---
diff --git a/src/dh-book-tree.c b/src/dh-book-tree.c
index 8bd976f..0b05de2 100644
--- a/src/dh-book-tree.c
+++ b/src/dh-book-tree.c
@@ -22,6 +22,7 @@
#include "config.h"
#include "dh-book-tree.h"
+#include <glib/gi18n-lib.h>
#include "dh-book-manager.h"
#include "dh-book.h"
@@ -594,12 +595,71 @@ dh_book_tree_dispose (GObject *object)
}
static void
+do_popup_menu (DhBookTree *tree,
+ GdkEventButton *event)
+{
+ GtkMenu *menu;
+ GtkWidget *menu_item;
+
+ menu = GTK_MENU (gtk_menu_new ());
+ g_signal_connect (menu,
+ "deactivate",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+
+ menu_item = gtk_menu_item_new_with_mnemonic (_("_Collapse All"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+ gtk_widget_show (menu_item);
+
+ gtk_menu_attach_to_widget (menu, GTK_WIDGET (tree), NULL);
+
+ if (event != NULL) {
+ gtk_menu_popup_at_pointer (menu, (GdkEvent *) event);
+ } else {
+ gtk_menu_popup_at_widget (menu,
+ GTK_WIDGET (tree),
+ GDK_GRAVITY_NORTH_EAST,
+ GDK_GRAVITY_NORTH_WEST,
+ NULL);
+ }
+}
+
+static gboolean
+dh_book_tree_button_press_event (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ DhBookTree *tree = DH_BOOK_TREE (widget);
+
+ if (gdk_event_triggers_context_menu ((GdkEvent *) event) &&
+ event->type == GDK_BUTTON_PRESS) {
+ do_popup_menu (tree, event);
+ return GDK_EVENT_STOP;
+ }
+
+ if (GTK_WIDGET_CLASS (dh_book_tree_parent_class)->button_press_event != NULL)
+ return GTK_WIDGET_CLASS (dh_book_tree_parent_class)->button_press_event (widget, event);
+
+ return GDK_EVENT_PROPAGATE;
+}
+
+static gboolean
+dh_book_tree_popup_menu (GtkWidget *widget)
+{
+ do_popup_menu (DH_BOOK_TREE (widget), NULL);
+ return TRUE;
+}
+
+static void
dh_book_tree_class_init (DhBookTreeClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->dispose = dh_book_tree_dispose;
+ widget_class->button_press_event = dh_book_tree_button_press_event;
+ widget_class->popup_menu = dh_book_tree_popup_menu;
+
/**
* DhBookTree::link-selected:
* @tree: the #DhBookTree.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]