[gtk+] demo: Add a GtkHeaderBar
- From: William Jon McCann <mccann src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] demo: Add a GtkHeaderBar
- Date: Tue, 3 Dec 2013 15:52:03 +0000 (UTC)
commit e5726e97f40ddd1def220b176880dc6df3e90c35
Author: William Jon McCann <william jon mccann gmail com>
Date: Mon Dec 2 20:35:57 2013 -0500
demo: Add a GtkHeaderBar
demos/gtk-demo/main.c | 106 ++++++++++++++++++++++++++----------------------
demos/gtk-demo/main.ui | 30 +++++++++++++-
2 files changed, 85 insertions(+), 51 deletions(-)
---
diff --git a/demos/gtk-demo/main.c b/demos/gtk-demo/main.c
index 2449b12..5af0da3 100644
--- a/demos/gtk-demo/main.c
+++ b/demos/gtk-demo/main.c
@@ -16,6 +16,8 @@ static GtkWidget *source_view;
static gchar *current_file = NULL;
static GtkWidget *notebook;
+static GtkWidget *treeview;
+static GtkWidget *headerbar;
enum {
NAME_COLUMN,
@@ -102,6 +104,50 @@ window_closed_cb (GtkWidget *window, gpointer data)
g_free (cbdata);
}
+static void
+activate_run (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GtkWidget *window = user_data;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ PangoStyle style;
+ GDoDemoFunc func;
+ GtkWidget *demo;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+ gtk_tree_selection_get_selected (selection, &model, &iter);
+
+ gtk_tree_model_get (GTK_TREE_MODEL (model),
+ &iter,
+ FUNC_COLUMN, &func,
+ STYLE_COLUMN, &style,
+ -1);
+
+ if (func)
+ {
+ gtk_tree_store_set (GTK_TREE_STORE (model),
+ &iter,
+ STYLE_COLUMN, (style == PANGO_STYLE_ITALIC ? PANGO_STYLE_NORMAL :
PANGO_STYLE_ITALIC),
+ -1);
+ demo = (func) (window);
+
+ if (demo != NULL)
+ {
+ CallbackData *cbdata;
+
+ cbdata = g_new (CallbackData, 1);
+ cbdata->model = model;
+ cbdata->path = gtk_tree_model_get_path (model, &iter);
+
+ g_signal_connect (demo, "destroy",
+ G_CALLBACK (window_closed_cb), cbdata);
+ }
+ }
+}
+
/* Stupid syntax highlighting.
*
* No regex was used in the making of this highlighting.
@@ -725,67 +771,31 @@ load_file (const gchar *demoname,
g_object_unref (source_buffer);
}
-void
-row_activated_cb (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column)
-{
- GtkTreeIter iter;
- PangoStyle style;
- GDoDemoFunc func;
- GtkWidget *window;
- GtkTreeModel *model;
-
- model = gtk_tree_view_get_model (tree_view);
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (GTK_TREE_MODEL (model),
- &iter,
- FUNC_COLUMN, &func,
- STYLE_COLUMN, &style,
- -1);
-
- if (func)
- {
- gtk_tree_store_set (GTK_TREE_STORE (model),
- &iter,
- STYLE_COLUMN, (style == PANGO_STYLE_ITALIC ? PANGO_STYLE_NORMAL :
PANGO_STYLE_ITALIC),
- -1);
- window = (func) (gtk_widget_get_toplevel (GTK_WIDGET (tree_view)));
-
- if (window != NULL)
- {
- CallbackData *cbdata;
-
- cbdata = g_new (CallbackData, 1);
- cbdata->model = model;
- cbdata->path = gtk_tree_path_copy (path);
-
- g_signal_connect (window, "destroy",
- G_CALLBACK (window_closed_cb), cbdata);
- }
- }
-}
-
static void
selection_cb (GtkTreeSelection *selection,
GtkTreeModel *model)
{
GtkTreeIter iter;
- char *name, *filename;
+ char *name;
+ char *filename;
+ char *title;
if (! gtk_tree_selection_get_selected (selection, NULL, &iter))
return;
gtk_tree_model_get (model, &iter,
NAME_COLUMN, &name,
+ TITLE_COLUMN, &title,
FILENAME_COLUMN, &filename,
-1);
if (filename)
load_file (name, filename);
+ gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar), title);
+
g_free (name);
+ g_free (title);
g_free (filename);
}
@@ -906,11 +916,13 @@ activate (GApplication *app)
{
GtkBuilder *builder;
GtkWindow *window;
- GtkWidget *treeview;
GtkWidget *widget;
GtkTreeModel *model;
GtkTreeIter iter;
GError *error = NULL;
+ static GActionEntry win_entries[] = {
+ { "run", activate_run, NULL, NULL, NULL }
+ };
builder = gtk_builder_new ();
gtk_builder_add_from_resource (builder, "/ui/main.ui", &error);
@@ -922,17 +934,15 @@ activate (GApplication *app)
window = (GtkWindow *)gtk_builder_get_object (builder, "window");
gtk_application_add_window (GTK_APPLICATION (app), window);
-#if 0
g_action_map_add_action_entries (G_ACTION_MAP (window),
win_entries, G_N_ELEMENTS (win_entries),
window);
-#endif
notebook = (GtkWidget *)gtk_builder_get_object (builder, "notebook");
info_view = (GtkWidget *)gtk_builder_get_object (builder, "info-textview");
source_view = (GtkWidget *)gtk_builder_get_object (builder, "source-textview");
-
+ headerbar = (GtkWidget *)gtk_builder_get_object (builder, "headerbar");
treeview = (GtkWidget *)gtk_builder_get_object (builder, "treeview");
model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview));
@@ -940,8 +950,6 @@ activate (GApplication *app)
populate_model (model);
- g_signal_connect (treeview, "row-activated", G_CALLBACK (row_activated_cb), model);
-
widget = (GtkWidget *)gtk_builder_get_object (builder, "treeview-selection");
g_signal_connect (widget, "changed", G_CALLBACK (selection_cb), model);
diff --git a/demos/gtk-demo/main.ui b/demos/gtk-demo/main.ui
index 060ff4b..dc32240 100644
--- a/demos/gtk-demo/main.ui
+++ b/demos/gtk-demo/main.ui
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
- <!-- interface-requires gtk+ 3.0 -->
+ <!-- interface-requires gtk+ 3.10 -->
<menu id="appmenu">
<section>
<item>
@@ -16,7 +16,6 @@
</item>
</section>
</menu>
- <!-- interface-requires gtk+ 3.10 -->
<object class="GtkTreeStore" id="treestore">
<columns>
<!-- column-name NAME -->
@@ -38,6 +37,33 @@
<property name="title">GTK+ Demo</property>
<signal name="delete-event" handler="gtk_false" swapped="no"/>
<signal name="destroy" handler="gtk_main_quit" swapped="no"/>
+ <child type="titlebar">
+ <object class="GtkHeaderBar" id="headerbar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show-close-button">True</property>
+ <child>
+ <object class="GtkButton" id="run_button">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="can_focus">False</property>
+ <property name="action_name">win.run</property>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child>
+ <object class="GtkLabel" id="run_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Run</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]