From 1fb154e62a6b3cfb2cc6ed89c3a891950ca6a325 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 28 Jul 2015 23:48:10 -0400 Subject: [PATCH] gtk3-demo: Add a scrollbar context menu Just to demonstrate the capability, not because this is excellent UI. --- demos/gtk-demo/main.c | 48 ++++++++++++++++++++++++++++++++++++++++++ demos/gtk-demo/main.ui | 2 +- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/demos/gtk-demo/main.c b/demos/gtk-demo/main.c index ee87fc983d..ea47c8892f 100644 --- a/demos/gtk-demo/main.c +++ b/demos/gtk-demo/main.c @@ -972,6 +972,32 @@ row_activated_cb (GtkWidget *tree_view, run_example_for_row (window, model, &iter); } +static void +start_cb (GtkMenuItem *item, GtkWidget *scrollbar) +{ + GtkAdjustment *adj; + + adj = gtk_range_get_adjustment (GTK_RANGE (scrollbar)); + gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj)); +} + +static void +end_cb (GtkMenuItem *item, GtkWidget *scrollbar) +{ + GtkAdjustment *adj; + + adj = gtk_range_get_adjustment (GTK_RANGE (scrollbar)); + gtk_adjustment_set_value (adj, gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj)); +} + +static gboolean +scrollbar_popup (GtkWidget *scrollbar, GtkWidget *menu) +{ + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time ()); + + return TRUE; +} + static void activate (GApplication *app) { @@ -981,6 +1007,11 @@ activate (GApplication *app) GtkTreeModel *model; GtkTreeIter iter; GError *error = NULL; + GtkWidget *sw; + GtkWidget *scrollbar; + GtkWidget *menu; + GtkWidget *item; + static GActionEntry win_entries[] = { { "run", activate_run, NULL, NULL, NULL } }; @@ -1007,6 +1038,23 @@ activate (GApplication *app) treeview = (GtkWidget *)gtk_builder_get_object (builder, "treeview"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview)); + sw = (GtkWidget *)gtk_builder_get_object (builder, "source-scrolledwindow"); + scrollbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (sw)); + + menu = gtk_menu_new (); + + item = gtk_menu_item_new_with_label ("Start"); + g_signal_connect (item, "activate", G_CALLBACK (start_cb), scrollbar); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + item = gtk_menu_item_new_with_label ("End"); + g_signal_connect (item, "activate", G_CALLBACK (end_cb), scrollbar); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + gtk_widget_show_all (menu); + + g_signal_connect (scrollbar, "popup-menu", G_CALLBACK (scrollbar_popup), menu); + load_file (gtk_demos[0].name, gtk_demos[0].filename); populate_model (model); diff --git a/demos/gtk-demo/main.ui b/demos/gtk-demo/main.ui index f24989fc30..ebdb9cd872 100644 --- a/demos/gtk-demo/main.ui +++ b/demos/gtk-demo/main.ui @@ -160,7 +160,7 @@ - + True True none