summaryrefslogtreecommitdiff
path: root/gladeui/glade-inspector.c
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <juanpablougarte@gmail.com>2013-03-10 15:01:43 -0300
committerJuan Pablo Ugarte <juanpablougarte@gmail.com>2013-03-12 19:28:19 -0300
commit644299857b3cdd3861bfebfb7aefdabe0e93fb30 (patch)
tree923232337c80bc2dc41eeccdc499f7ecc9939e7e /gladeui/glade-inspector.c
parentcfa923f8596cca177c04c17e1afcaf56e9d97013 (diff)
downloadglade-644299857b3cdd3861bfebfb7aefdabe0e93fb30.tar.gz
Removed search entry from GladeInspector
Added glade_inspector_set_search_entry()
Diffstat (limited to 'gladeui/glade-inspector.c')
-rw-r--r--gladeui/glade-inspector.c328
1 files changed, 87 insertions, 241 deletions
diff --git a/gladeui/glade-inspector.c b/gladeui/glade-inspector.c
index 69d91ed7..63bc143d 100644
--- a/gladeui/glade-inspector.c
+++ b/gladeui/glade-inspector.c
@@ -60,6 +60,7 @@ enum
{
PROP_0,
PROP_PROJECT,
+ PROP_SEARCH_ENTRY,
N_PROPERTIES
};
@@ -76,10 +77,7 @@ struct _GladeInspectorPrivate
GtkTreeModel *filter;
GladeProject *project;
-
- GtkWidget *entry;
- guint idle_complete;
- gboolean search_disabled;
+ GtkWidget *search_entry;
};
static GParamSpec *properties[N_PROPERTIES];
@@ -100,10 +98,12 @@ static gint button_press_cb (GtkWidget *widget,
GladeInspector *inspector);
G_DEFINE_TYPE (GladeInspector, glade_inspector, GTK_TYPE_VBOX)
- static void
- glade_inspector_set_property (GObject *object,
- guint property_id,
- const GValue *value, GParamSpec *pspec)
+
+static void
+glade_inspector_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
GladeInspector *inspector = GLADE_INSPECTOR (object);
@@ -112,6 +112,9 @@ G_DEFINE_TYPE (GladeInspector, glade_inspector, GTK_TYPE_VBOX)
case PROP_PROJECT:
glade_inspector_set_project (inspector, g_value_get_object (value));
break;
+ case PROP_SEARCH_ENTRY:
+ glade_inspector_set_search_entry (inspector, g_value_get_object (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -131,6 +134,9 @@ glade_inspector_get_property (GObject *object,
case PROP_PROJECT:
g_value_set_object (value, glade_inspector_get_project (inspector));
break;
+ case PROP_SEARCH_ENTRY:
+ g_value_set_object (value, inspector->priv->search_entry);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -181,7 +187,14 @@ glade_inspector_class_init (GladeInspectorClass *klass)
_("The project being inspected"),
GLADE_TYPE_PROJECT,
G_PARAM_READABLE | G_PARAM_WRITABLE);
-
+
+ properties[PROP_SEARCH_ENTRY] =
+ g_param_spec_object ("search-entry",
+ _("Search Entry"),
+ _("The search entry to use for this inspector. see gtk_tree_view_set_search_entry()"),
+ GTK_TYPE_ENTRY,
+ G_PARAM_READWRITE);
+
/* Install all properties */
g_object_class_install_properties (object_class, N_PROPERTIES, properties);
@@ -215,7 +228,7 @@ glade_inspector_visible_func (GtkTreeModel *model,
gboolean retval = FALSE;
- if (priv->search_disabled)
+ if (!priv->search_entry)
return TRUE;
if (gtk_tree_model_iter_children (model, &iter, parent))
@@ -228,212 +241,21 @@ glade_inspector_visible_func (GtkTreeModel *model,
}
if (!retval)
{
- const gchar *text = gtk_entry_get_text (GTK_ENTRY (priv->entry));
- gchar *widget_name;
-
- gtk_tree_model_get (model, parent, GLADE_PROJECT_MODEL_COLUMN_NAME,
- &widget_name, -1);
-
- retval = find_in_string_insensitive (widget_name, text);
-
- g_free (widget_name);
+ const gchar *text = gtk_entry_get_text (GTK_ENTRY (priv->search_entry));
+ GladeWidget *gwidget;
+ GObject *object;
+
+ /* We better get the object and then access the Gladewidget name than
+ allocating the string from the model */
+ gtk_tree_model_get (model, parent, GLADE_PROJECT_MODEL_COLUMN_OBJECT, &object, -1);
+ gwidget = glade_widget_get_from_gobject (object);
+ retval = find_in_string_insensitive (glade_widget_get_name (gwidget), text);
}
return retval;
}
static void
-glade_inspector_filter (GladeInspector *inspector)
-{
- GladeInspectorPrivate *priv = inspector->priv;
-
- if (!priv->search_disabled)
- {
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (priv->filter));
- gtk_tree_view_expand_all (GTK_TREE_VIEW (priv->view));
- }
-
-}
-
-static void
-search_entry_changed_cb (GtkEntry *entry, GladeInspector *inspector)
-{
- glade_inspector_filter (inspector);
-}
-
-static void
-selection_name_foreach_func (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gchar **selection)
-{
- if (*selection == NULL)
- {
- gchar *name;
-
- gtk_tree_model_get (model, iter, GLADE_PROJECT_MODEL_COLUMN_NAME, &name, -1);
- *selection = name;
- }
-}
-
-static gchar *
-get_selected_name (GladeInspector *inspector)
-{
- GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (inspector->priv->view));
- gchar *name = NULL;
-
- gtk_tree_selection_selected_foreach (selection,
- (GtkTreeSelectionForeachFunc)
- selection_name_foreach_func, &name);
-
- return name;
-}
-
-static gboolean
-search_complete_idle (GladeInspector *inspector)
-{
- GladeInspectorPrivate *priv = inspector->priv;
- gchar *completed = get_selected_name (inspector);
- const gchar *str;
- gsize length;
-
- str = gtk_entry_get_text (GTK_ENTRY (priv->entry));
-
- if (completed)
- {
- length = strlen (str);
-
- gtk_entry_set_text (GTK_ENTRY (priv->entry), completed);
- gtk_editable_set_position (GTK_EDITABLE (priv->entry), length);
- gtk_editable_select_region (GTK_EDITABLE (priv->entry), length, -1);
- g_free (completed);
- }
-
- priv->idle_complete = 0;
-
- return FALSE;
-}
-
-static void
-search_entry_text_inserted_cb (GtkEntry *entry,
- const gchar *text,
- gint length,
- gint *position,
- GladeInspector *inspector)
-{
- GladeInspectorPrivate *priv = inspector->priv;
-
- if (!priv->search_disabled && !priv->idle_complete)
- {
- priv->idle_complete =
- g_idle_add ((GSourceFunc) search_complete_idle, inspector);
- }
-}
-
-static gboolean
-search_entry_key_press_event_cb (GtkEntry *entry,
- GdkEventKey *event,
- GladeInspector *inspector)
-{
- GladeInspectorPrivate *priv = inspector->priv;
- const gchar *str;
-
- if (event->keyval == GDK_KEY_Tab)
- {
- if (event->state & GDK_CONTROL_MASK)
- {
- gtk_widget_grab_focus (priv->view);
- }
- else
- {
- gtk_editable_set_position (GTK_EDITABLE (entry), -1);
- gtk_editable_select_region (GTK_EDITABLE (entry), -1, -1);
- }
- return TRUE;
- }
-
- if (event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter)
- {
- gchar *name;
-
- str = gtk_entry_get_text (GTK_ENTRY (priv->entry));
-
- if (str && (name = get_selected_name (inspector)))
- {
- gtk_entry_set_text (GTK_ENTRY (entry), name);
- g_free (name);
- gtk_editable_set_position (GTK_EDITABLE (entry), -1);
- gtk_editable_select_region (GTK_EDITABLE (entry), -1, -1);
- }
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-widget_font_desc_set_style (GtkWidget *widget, PangoStyle style)
-{
- GtkStyleContext *context = gtk_widget_get_style_context (widget);
- PangoFontDescription *font_desc =
- pango_font_description_copy (gtk_style_context_get_font (context, GTK_STATE_FLAG_NORMAL));
-
- pango_font_description_set_style (font_desc, style);
- gtk_widget_override_font (widget, font_desc);
- pango_font_description_free (font_desc);
-}
-
-static void
-search_entry_update (GladeInspector *inspector)
-{
- GladeInspectorPrivate *priv = inspector->priv;
- const gchar *str = gtk_entry_get_text (GTK_ENTRY (priv->entry));
-
- if (str[0] == '\0')
- {
- GtkStyleContext *context;
- GdkRGBA color;
-
- priv->search_disabled = TRUE;
- widget_font_desc_set_style (priv->entry, PANGO_STYLE_ITALIC);
- gtk_entry_set_text (GTK_ENTRY (priv->entry), _("< search widgets >"));
-
- context = gtk_widget_get_style_context (priv->entry);
- gtk_style_context_get_color (context, GTK_STATE_FLAG_INSENSITIVE, &color);
- gtk_widget_override_color (priv->entry, GTK_STATE_FLAG_NORMAL, &color);
- }
-}
-
-static gboolean
-search_entry_focus_in_cb (GtkWidget *entry,
- GdkEventFocus *event,
- GladeInspector *inspector)
-{
- GladeInspectorPrivate *priv = inspector->priv;
-
- if (priv->search_disabled)
- {
- gtk_entry_set_text (GTK_ENTRY (priv->entry), "");
- gtk_widget_override_color (priv->entry, GTK_STATE_NORMAL, NULL);
- gtk_widget_override_font (priv->entry, NULL);
-
- priv->search_disabled = FALSE;
- }
-
- return FALSE;
-}
-
-static gboolean
-search_entry_focus_out_cb (GtkWidget *entry,
- GdkEventFocus *event,
- GladeInspector *inspector)
-{
- search_entry_update (inspector);
-
- return FALSE;
-}
-
-static void
glade_inspector_init (GladeInspector *inspector)
{
GladeInspectorPrivate *priv;
@@ -446,24 +268,6 @@ glade_inspector_init (GladeInspector *inspector)
priv->project = NULL;
- priv->entry = gtk_entry_new ();
-
- search_entry_update (inspector);
- gtk_widget_show (priv->entry);
- gtk_box_pack_start (GTK_BOX (inspector), priv->entry, FALSE, FALSE, 2);
-
- g_signal_connect (priv->entry, "changed",
- G_CALLBACK (search_entry_changed_cb), inspector);
- g_signal_connect (priv->entry, "key-press-event",
- G_CALLBACK (search_entry_key_press_event_cb), inspector);
- g_signal_connect_after (priv->entry, "insert-text",
- G_CALLBACK (search_entry_text_inserted_cb),
- inspector);
- g_signal_connect (priv->entry, "focus-in-event",
- G_CALLBACK (search_entry_focus_in_cb), inspector);
- g_signal_connect (priv->entry, "focus-out-event",
- G_CALLBACK (search_entry_focus_out_cb), inspector);
-
priv->view = gtk_tree_view_new ();
add_columns (GTK_TREE_VIEW (priv->view));
gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->view), GLADE_PROJECT_MODEL_COLUMN_NAME);
@@ -500,12 +304,6 @@ glade_inspector_dispose (GObject *object)
glade_inspector_set_project (inspector, NULL);
- if (inspector->priv->idle_complete)
- {
- g_source_remove (inspector->priv->idle_complete);
- inspector->priv->idle_complete = 0;
- }
-
G_OBJECT_CLASS (glade_inspector_parent_class)->dispose (object);
}
@@ -783,6 +581,9 @@ glade_inspector_set_project (GladeInspector *inspector, GladeProject *project)
priv->project = NULL;
}
+ gtk_tree_view_set_search_entry (GTK_TREE_VIEW (priv->view), NULL);
+ gtk_tree_view_set_enable_search (GTK_TREE_VIEW (priv->view), FALSE);
+
if (project)
{
priv->project = project;
@@ -802,13 +603,12 @@ glade_inspector_set_project (GladeInspector *inspector, GladeProject *project)
connect_project_signals (inspector, project);
- gtk_tree_view_set_search_entry (GTK_TREE_VIEW (priv->view), GTK_ENTRY (priv->entry));
- gtk_tree_view_set_enable_search (GTK_TREE_VIEW (priv->view), TRUE);
- }
- else
- {
- gtk_tree_view_set_search_entry (GTK_TREE_VIEW (priv->view), NULL);
- gtk_tree_view_set_enable_search (GTK_TREE_VIEW (priv->view), FALSE);
+ if (priv->search_entry)
+ {
+ gtk_tree_view_set_search_entry (GTK_TREE_VIEW (priv->view),
+ GTK_ENTRY (priv->search_entry));
+ gtk_tree_view_set_enable_search (GTK_TREE_VIEW (priv->view), TRUE);
+ }
}
g_object_notify_by_pspec (G_OBJECT (inspector), properties[PROP_PROJECT]);
@@ -906,3 +706,49 @@ glade_inspector_new_with_project (GladeProject *project)
return GTK_WIDGET (inspector);
}
+
+static void
+search_entry_changed_cb (GtkEntry *entry, GladeInspector *inspector)
+{
+ GladeInspectorPrivate *priv = inspector->priv;
+
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (priv->filter));
+ gtk_tree_view_expand_all (GTK_TREE_VIEW (priv->view));
+}
+
+/**
+ * glade_inspector_set_search_entry:
+ * @project: a #GladeProject
+ * @entry: a #GtkEntry
+ *
+ * Sets @entry as the interactive search entry for the inspector treeview.
+ */
+void
+glade_inspector_set_search_entry (GladeInspector *inspector, GtkEntry *entry)
+{
+ GladeInspectorPrivate *priv;
+
+ g_return_if_fail (GLADE_IS_INSPECTOR (inspector));
+
+ priv = inspector->priv;
+
+ if (priv->search_entry)
+ g_signal_handlers_disconnect_by_func (priv->search_entry, search_entry_changed_cb, inspector);
+
+ g_clear_object (&priv->search_entry);
+
+ if (entry)
+ {
+ priv->search_entry = g_object_ref (entry);
+
+ g_signal_connect (entry, "changed", G_CALLBACK (search_entry_changed_cb), inspector);
+ }
+
+ if (priv->project)
+ {
+ gtk_tree_view_set_search_entry (GTK_TREE_VIEW (priv->view), entry);
+ gtk_tree_view_set_enable_search (GTK_TREE_VIEW (priv->view),
+ entry ? TRUE : FALSE);
+ }
+}
+