[gtk+] wip: more icon browser rework
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] wip: more icon browser rework
- Date: Tue, 29 Jul 2014 11:59:20 +0000 (UTC)
commit 05d5fa43f354781873e3791acb3e71b4ae0be836
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Jul 27 13:44:41 2014 +0200
wip: more icon browser rework
demos/icon-browser/iconbrowserwin.c | 162 +++++--------------------
demos/icon-browser/window.ui | 229 +++++++++++++++--------------------
2 files changed, 132 insertions(+), 259 deletions(-)
---
diff --git a/demos/icon-browser/iconbrowserwin.c b/demos/icon-browser/iconbrowserwin.c
index 7d03e48..903d932 100644
--- a/demos/icon-browser/iconbrowserwin.c
+++ b/demos/icon-browser/iconbrowserwin.c
@@ -23,27 +23,17 @@ struct _IconBrowserWindow
GtkListStore *store;
GtkCellRenderer *cell;
+ GtkCellRenderer *text_cell;
GtkWidget *search;
GtkWidget *searchbar;
GtkWidget *searchentry;
GtkWidget *list;
- GtkWidget *images;
GtkWidget *image1;
GtkWidget *image2;
GtkWidget *image3;
GtkWidget *image4;
GtkWidget *image5;
- GtkWidget *symbolic_eventbox;
- GtkWidget *symbolic_images;
- GtkWidget *symbolic_image1;
- GtkWidget *symbolic_image2;
- GtkWidget *symbolic_image3;
- GtkWidget *symbolic_image4;
- GtkWidget *symbolic_image5;
- GtkWidget *name;
GtkWidget *description;
- GtkWidget *context;
- GtkWidget *context_description;
};
struct _IconBrowserWindowClass
@@ -89,73 +79,37 @@ item_activated (GtkIconView *icon_view, GtkTreePath *path, IconBrowserWindow *wi
GtkTreeIter iter;
gchar *name;
gchar *description;
- gchar *context_id;
- gchar *symbolic_name;
- Context *context;
+ gint column;
gtk_tree_model_get_iter (GTK_TREE_MODEL (win->filter_model), &iter, path);
+ if (win->symbolic)
+ column = SYMBOLIC_NAME_COLUMN;
+ else
+ column = NAME_COLUMN;
gtk_tree_model_get (GTK_TREE_MODEL (win->filter_model), &iter,
- NAME_COLUMN, &name,
- SYMBOLIC_NAME_COLUMN, &symbolic_name,
+ column, &name,
DESCRIPTION_COLUMN, &description,
- CONTEXT_COLUMN, &context_id,
-1);
- if (name != NULL && gtk_icon_theme_has_icon (gtk_icon_theme_get_default (), name))
+ if (name == NULL || !gtk_icon_theme_has_icon (gtk_icon_theme_get_default (), name))
{
- gtk_widget_show (win->images);
-
- set_image (win->image1, name, 16);
- set_image (win->image2, name, 24);
- set_image (win->image3, name, 32);
- set_image (win->image4, name, 48);
- set_image (win->image5, name, 64);
- }
- else
- {
- gtk_widget_hide (win->images);
+ g_free (description);
+ return;
}
- context = (Context*)g_hash_table_lookup (win->contexts, context_id);
-
- gtk_label_set_label (GTK_LABEL (win->description), description);
- gtk_label_set_label (GTK_LABEL (win->context), context->name);
- gtk_label_set_label (GTK_LABEL (win->context_description), context->description);
-
- if (symbolic_name != NULL && gtk_icon_theme_has_icon (gtk_icon_theme_get_default (), symbolic_name))
- {
- gtk_widget_show (win->symbolic_images);
-
- set_image (win->symbolic_image1, symbolic_name, 16);
- set_image (win->symbolic_image2, symbolic_name, 24);
- set_image (win->symbolic_image3, symbolic_name, 32);
- set_image (win->symbolic_image4, symbolic_name, 48);
- set_image (win->symbolic_image5, symbolic_name, 64);
-
- if (gtk_icon_theme_has_icon (gtk_icon_theme_get_default (), name))
- {
- gchar *tmp;
- tmp = g_strconcat (name, " / ", symbolic_name, NULL);
- gtk_label_set_label (GTK_LABEL (win->name), tmp);
- g_free (tmp);
- }
- else
- gtk_label_set_label (GTK_LABEL (win->name), symbolic_name);
- }
- else
- {
- gtk_widget_hide (win->symbolic_images);
-
- gtk_label_set_label (GTK_LABEL (win->name), name);
- }
+ gtk_window_set_title (GTK_WINDOW (win->details), name);
+ set_image (win->image1, name, 16);
+ set_image (win->image2, name, 24);
+ set_image (win->image3, name, 32);
+ set_image (win->image4, name, 48);
+ set_image (win->image5, name, 64);
+ gtk_label_set_text (GTK_LABEL (win->description), description);
gtk_window_present (GTK_WINDOW (win->details));
g_free (name);
g_free (description);
- g_free (context_id);
- g_free (symbolic_name);
}
static void
@@ -701,58 +655,6 @@ key_press_event_cb (GtkWidget *widget,
return gtk_search_bar_handle_event (bar, event);
}
-static void
-symbolic_enter_cb (GtkWidget *widget,
- GdkEvent *event,
- IconBrowserWindow *win)
-{
- gtk_style_context_add_class (gtk_widget_get_style_context (win->symbolic_images), "warning");
- gtk_style_context_add_class (gtk_widget_get_style_context (win->symbolic_image1), "warning");
- gtk_style_context_add_class (gtk_widget_get_style_context (win->symbolic_image2), "warning");
- gtk_style_context_add_class (gtk_widget_get_style_context (win->symbolic_image3), "warning");
- gtk_style_context_add_class (gtk_widget_get_style_context (win->symbolic_image4), "warning");
- gtk_style_context_add_class (gtk_widget_get_style_context (win->symbolic_image5), "warning");
-}
-
-static void
-symbolic_leave_cb (GtkWidget *widget,
- GdkEvent *event,
- IconBrowserWindow *win)
-{
- gtk_style_context_remove_class (gtk_widget_get_style_context (win->symbolic_images), "warning");
- gtk_style_context_remove_class (gtk_widget_get_style_context (win->symbolic_image1), "warning");
- gtk_style_context_remove_class (gtk_widget_get_style_context (win->symbolic_image2), "warning");
- gtk_style_context_remove_class (gtk_widget_get_style_context (win->symbolic_image3), "warning");
- gtk_style_context_remove_class (gtk_widget_get_style_context (win->symbolic_image4), "warning");
- gtk_style_context_remove_class (gtk_widget_get_style_context (win->symbolic_image5), "warning");
-}
-
-static void
-set_icon (GtkCellLayout *cell_layout,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- IconBrowserWindow *win = data;
- gchar *name;
- gint column;
-
- if (win->symbolic)
- column = SYMBOLIC_NAME_COLUMN;
- else
- column = NAME_COLUMN;
-
- gtk_tree_model_get (model, iter,
- column, &name,
- -1);
-
- if (name)
- g_object_set (cell, "icon-name", name, NULL);
-
- g_free (name);
-}
-
static gboolean
icon_visible_func (GtkTreeModel *model,
GtkTreeIter *iter,
@@ -774,7 +676,7 @@ icon_visible_func (GtkTreeModel *model,
CONTEXT_COLUMN, &context,
-1);
- visible = name != NULL && g_strcmp0 (context, win->current_context->id) == 0;
+ visible = name != NULL && win->current_context != NULL && g_strcmp0 (context, win->current_context->id) ==
0;
g_free (name);
g_free (context);
@@ -785,7 +687,18 @@ icon_visible_func (GtkTreeModel *model,
static void
symbolic_toggled (GtkToggleButton *toggle, IconBrowserWindow *win)
{
+ gint column;
+
win->symbolic = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle));
+
+ if (win->symbolic)
+ column = SYMBOLIC_NAME_COLUMN;
+ else
+ column = NAME_COLUMN;
+
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (win->list), win->cell, "icon-name", column, NULL);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (win->list), win->text_cell, "text", column, NULL);
+
gtk_tree_model_filter_refilter (win->filter_model);
gtk_widget_queue_draw (win->list);
}
@@ -801,15 +714,14 @@ icon_browser_window_init (IconBrowserWindow *win)
win->searchbar, "search-mode-enabled",
G_BINDING_BIDIRECTIONAL);
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (win->list), win->cell, set_icon, win, NULL);
// gtk_tree_view_set_search_entry (GTK_TREE_VIEW (win->list), GTK_ENTRY (win->searchentry));
g_signal_connect (win, "key-press-event", G_CALLBACK (key_press_event_cb), win->searchbar);
- g_signal_connect (win->symbolic_eventbox, "enter-notify-event", G_CALLBACK (symbolic_enter_cb), win);
- g_signal_connect (win->symbolic_eventbox, "leave-notify-event", G_CALLBACK (symbolic_leave_cb), win);
gtk_tree_model_filter_set_visible_func (win->filter_model, icon_visible_func, win, NULL);
gtk_window_set_transient_for (GTK_WINDOW (win->details), GTK_WINDOW (win));
+ symbolic_toggled (GTK_TOGGLE_BUTTON (win->symbolic_radio), win);
+
populate (win);
}
@@ -826,27 +738,17 @@ icon_browser_window_class_init (IconBrowserWindowClass *class)
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, store);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, cell);
+ gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, text_cell);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, search);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, searchbar);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, searchentry);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, list);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, images);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, image1);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, image2);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, image3);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, image4);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, image5);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, description);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, context);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, name);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, context_description);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, symbolic_eventbox);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, symbolic_images);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, symbolic_image1);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, symbolic_image2);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, symbolic_image3);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, symbolic_image4);
- gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, symbolic_image5);
gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (class), search_text_changed);
gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (class), selection_changed);
diff --git a/demos/icon-browser/window.ui b/demos/icon-browser/window.ui
index 98d9277..6974d49 100644
--- a/demos/icon-browser/window.ui
+++ b/demos/icon-browser/window.ui
@@ -110,9 +110,13 @@
<property name="ypad">10</property>
<property name="stock-size">5</property>
</object>
- <attributes>
- <attribute name="icon-name">0</attribute>
- </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererText" id="text_cell">
+ <property name="xpad">10</property>
+ <property name="ypad">10</property>
+ <property name="xalign">0.5</property>
+ </object>
</child>
</object>
</child>
@@ -134,6 +138,7 @@
<object class="GtkDialog" id="details">
<property name="modal">True</property>
<property name="use-header-bar">1</property>
+ <property name="resizable">False</property>
<signal name="delete-event" handler="gtk_widget_hide_on_delete"/>
<child internal-child="vbox">
<object class="GtkBox">
@@ -144,203 +149,169 @@
<property name="row-spacing">10</property>
<property name="column-spacing">10</property>
<child>
- <object class="GtkLabel">
+ <object class="GtkImage" id="image1">
<property name="visible">True</property>
- <property name="label" translatable="yes">Name</property>
- <property name="xalign">0</property>
+ <property name="xpad">4</property>
+ <property name="ypad">4</property>
+ <property name="halign">center</property>
+ <property name="valign">end</property>
</object>
<packing>
<property name="left-attach">0</property>
- <property name="top-attach">0</property>
+ <property name="top-attach">1</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="name">
+ <object class="GtkImage" id="image2">
<property name="visible">True</property>
- <property name="xalign">0</property>
+ <property name="xpad">4</property>
+ <property name="ypad">4</property>
+ <property name="halign">center</property>
+ <property name="valign">end</property>
</object>
<packing>
<property name="left-attach">1</property>
- <property name="top-attach">0</property>
- <property name="width">4</property>
+ <property name="top-attach">1</property>
</packing>
</child>
<child>
- <object class="GtkLabel">
+ <object class="GtkImage" id="image3">
<property name="visible">True</property>
- <property name="label" translatable="yes">Description</property>
- <property name="xalign">0</property>
- <property name="valign">start</property>
+ <property name="xpad">4</property>
+ <property name="ypad">4</property>
+ <property name="halign">center</property>
+ <property name="valign">end</property>
</object>
<packing>
- <property name="left-attach">0</property>
+ <property name="left-attach">2</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="description">
+ <object class="GtkImage" id="image4">
<property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="xalign">0</property>
- <property name="valign">start</property>
+ <property name="xpad">4</property>
+ <property name="ypad">4</property>
+ <property name="halign">center</property>
+ <property name="valign">end</property>
</object>
<packing>
- <property name="left-attach">1</property>
+ <property name="left-attach">3</property>
<property name="top-attach">1</property>
- <property name="width">4</property>
</packing>
</child>
<child>
- <object class="GtkLabel">
+ <object class="GtkImage" id="image5">
<property name="visible">True</property>
- <property name="label" translatable="yes">Context</property>
- <property name="xalign">0</property>
- <property name="valign">start</property>
+ <property name="xpad">4</property>
+ <property name="ypad">4</property>
+ <property name="halign">center</property>
+ <property name="valign">end</property>
</object>
<packing>
- <property name="left-attach">0</property>
- <property name="top-attach">2</property>
+ <property name="left-attach">4</property>
+ <property name="top-attach">1</property>
</packing>
</child>
+
<child>
- <object class="GtkLabel" id="context">
+ <object class="GtkLabel" id="label1">
<property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="xalign">0</property>
- <property name="valign">start</property>
+ <property name="xpad">4</property>
+ <property name="ypad">4</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="label">16x16</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
<packing>
- <property name="left-attach">1</property>
+ <property name="left-attach">0</property>
<property name="top-attach">2</property>
- <property name="width">4</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="context_description">
- <property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="xalign">0</property>
- <property name="valign">start</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">3</property>
- <property name="width">4</property>
- </packing>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="images">
- <property name="orientation">horizontal</property>
- <property name="hexpand">True</property>
- <property name="homogeneous">True</property>
- <property name="spacing">10</property>
- <property name="margin">10</property>
- <child>
- <object class="GtkImage" id="image1">
+ <object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="xpad">4</property>
<property name="ypad">4</property>
<property name="halign">center</property>
- <property name="tooltip-text">16</property>
+ <property name="valign">center</property>
+ <property name="label">24x24</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ </packing>
</child>
<child>
- <object class="GtkImage" id="image2">
+ <object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="xpad">4</property>
<property name="ypad">4</property>
<property name="halign">center</property>
- <property name="tooltip-text">24</property>
+ <property name="valign">center</property>
+ <property name="label">32x32</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">2</property>
+ </packing>
</child>
<child>
- <object class="GtkImage" id="image3">
+ <object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="xpad">4</property>
<property name="ypad">4</property>
<property name="halign">center</property>
- <property name="tooltip-text">32</property>
+ <property name="valign">center</property>
+ <property name="label">48x48</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
+ <packing>
+ <property name="left-attach">3</property>
+ <property name="top-attach">2</property>
+ </packing>
</child>
<child>
- <object class="GtkImage" id="image4">
+ <object class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="xpad">4</property>
<property name="ypad">4</property>
<property name="halign">center</property>
- <property name="tooltip-text">48</property>
+ <property name="valign">center</property>
+ <property name="label">64x64</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
+ <packing>
+ <property name="left-attach">4</property>
+ <property name="top-attach">2</property>
+ </packing>
</child>
<child>
- <object class="GtkImage" id="image5">
+ <object class="GtkLabel" id="description">
<property name="visible">True</property>
- <property name="xpad">4</property>
- <property name="ypad">4</property>
- <property name="halign">center</property>
- <property name="tooltip-text">64</property>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkEventBox" id="symbolic_eventbox">
- <property name="visible">True</property>
- <property name="above-child">True</property>
- <child>
- <object class="GtkBox" id="symbolic_images">
- <property name="orientation">horizontal</property>
- <property name="hexpand">True</property>
- <property name="homogeneous">True</property>
- <property name="spacing">10</property>
- <property name="margin">10</property>
- <child>
- <object class="GtkImage" id="symbolic_image1">
- <property name="visible">True</property>
- <property name="xpad">4</property>
- <property name="ypad">4</property>
- <property name="halign">center</property>
- <property name="tooltip-text">16</property>
- </object>
- </child>
- <child>
- <object class="GtkImage" id="symbolic_image2">
- <property name="visible">True</property>
- <property name="xpad">4</property>
- <property name="ypad">4</property>
- <property name="halign">center</property>
- <property name="tooltip-text">24</property>
- </object>
- </child>
- <child>
- <object class="GtkImage" id="symbolic_image3">
- <property name="visible">True</property>
- <property name="xpad">4</property>
- <property name="ypad">4</property>
- <property name="halign">center</property>
- <property name="tooltip-text">32</property>
- </object>
- </child>
- <child>
- <object class="GtkImage" id="symbolic_image4">
- <property name="visible">True</property>
- <property name="xpad">4</property>
- <property name="ypad">4</property>
- <property name="halign">center</property>
- <property name="tooltip-text">48</property>
- </object>
- </child>
- <child>
- <object class="GtkImage" id="symbolic_image5">
- <property name="visible">True</property>
- <property name="xpad">4</property>
- <property name="ypad">4</property>
- <property name="halign">center</property>
- <property name="tooltip-text">64</property>
- </object>
- </child>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">60</property>
+ <property name="xalign">0</property>
+ <property name="valign">start</property>
</object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">3</property>
+ <property name="width">5</property>
+ </packing>
</child>
</object>
</child>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]