glade3 r2030 - in trunk: . gladeui plugins/gtk+ src
- From: tvb svn gnome org
- To: svn-commits-list gnome org
- Subject: glade3 r2030 - in trunk: . gladeui plugins/gtk+ src
- Date: Sat, 15 Nov 2008 19:54:46 +0000 (UTC)
Author: tvb
Date: Sat Nov 15 19:54:46 2008
New Revision: 2030
URL: http://svn.gnome.org/viewvc/glade3?rev=2030&view=rev
Log:
* gladeui/glade-utils.c: added glade_utils_hijack_key_press ()
* src/glade-window.c: Moved hijack_key_press to glade_utils
* gladeui/glade-editor.[ch]:
- Added "widget" property
- added glade_editor_dialog_for_widget()
* plugins/gtk+/gtk+.xml.in, plugins/gtk+/glade-gtk.c: Added "Edit Separately" action
Modified:
trunk/ChangeLog
trunk/gladeui/glade-base-editor.c
trunk/gladeui/glade-editor.c
trunk/gladeui/glade-editor.h
trunk/gladeui/glade-inspector.c
trunk/gladeui/glade-utils.c
trunk/gladeui/glade-utils.h
trunk/plugins/gtk+/glade-gtk.c
trunk/plugins/gtk+/gtk+.xml.in
trunk/src/glade-window.c
Modified: trunk/gladeui/glade-base-editor.c
==============================================================================
--- trunk/gladeui/glade-base-editor.c (original)
+++ trunk/gladeui/glade-base-editor.c Sat Nov 15 19:54:46 2008
@@ -1917,29 +1917,6 @@
gtk_widget_destroy (dialog);
}
-/* This function is meant to be attached to key-press-event of a toplevel,
- * it simply allows the window contents to treat key events /before/
- * accelerator keys come into play (this way widgets dont get deleted
- * when cutting text in an entry etc.).
- */
-static gint
-hijack_key_press (GtkWindow *window,
- GdkEventKey *event,
- gpointer user_data)
-{
- if (window->focus_widget &&
- (event->keyval == GDK_Delete || /* Filter Delete from accelerator keys */
- ((event->state & GDK_CONTROL_MASK) && /* CNTL keys... */
- ((event->keyval == GDK_c || event->keyval == GDK_C) || /* CNTL-C (copy) */
- (event->keyval == GDK_x || event->keyval == GDK_X) || /* CNTL-X (cut) */
- (event->keyval == GDK_v || event->keyval == GDK_V))))) /* CNTL-V (paste) */
- {
- return gtk_widget_event (window->focus_widget,
- (GdkEvent *)event);
- }
- return FALSE;
-}
-
/**
* glade_base_editor_pack_new_window:
* @editor: a #GladeBaseEditor
@@ -2003,7 +1980,7 @@
gtk_window_add_accel_group (GTK_WINDOW (window),
glade_app_get_accel_group ());
g_signal_connect (G_OBJECT (window), "key-press-event",
- G_CALLBACK (hijack_key_press), NULL);
+ G_CALLBACK (glade_utils_hijack_key_press), NULL);
}
Modified: trunk/gladeui/glade-editor.c
==============================================================================
--- trunk/gladeui/glade-editor.c (original)
+++ trunk/gladeui/glade-editor.c Sat Nov 15 19:54:46 2008
@@ -57,7 +57,8 @@
enum
{
PROP_0,
- PROP_SHOW_INFO
+ PROP_SHOW_INFO,
+ PROP_WIDGET
};
enum {
@@ -101,6 +102,9 @@
else
glade_editor_hide_info (editor);
break;
+ case PROP_WIDGET:
+ glade_editor_load_widget (editor, (GladeWidget *)g_value_get_object (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -120,6 +124,9 @@
case PROP_SHOW_INFO:
g_value_set_boolean (value, editor->show_info);
break;
+ case PROP_WIDGET:
+ g_value_set_object (value, editor->loaded_widget);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -149,6 +156,13 @@
"button for the loaded widget"),
FALSE, G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_WIDGET,
+ g_param_spec_object ("widget",
+ _("Widget"),
+ _("The currently loaded widget in this editor"),
+ GLADE_TYPE_WIDGET, G_PARAM_READWRITE));
+
/**
* GladeEditor::gtk-doc-search:
@@ -593,13 +607,27 @@
glade_editor_close_cb (GladeProject *project,
GladeEditor *editor)
{
- /* Detected project we are viewing was closed,
+ /* project we are viewing was closed,
* detatch from editor.
*/
glade_editor_load_widget (editor, NULL);
}
static void
+glade_editor_removed_cb (GladeProject *project,
+ GladeWidget *widget,
+ GladeEditor *editor)
+{
+ /* Widget we were viewing was removed from project,
+ * detatch from editor.
+ */
+ if (widget == editor->loaded_widget)
+ glade_editor_load_widget (editor, NULL);
+
+}
+
+
+static void
glade_editor_load_editable (GladeEditor *editor,
GladeWidget *widget,
GladeEditorPageType type)
@@ -658,6 +686,8 @@
project = glade_widget_get_project (editor->loaded_widget);
g_signal_handler_disconnect (G_OBJECT (project),
editor->project_closed_signal_id);
+ g_signal_handler_disconnect (G_OBJECT (project),
+ editor->project_removed_signal_id);
g_signal_handler_disconnect (G_OBJECT (editor->loaded_widget),
editor->widget_warning_id);
g_signal_handler_disconnect (G_OBJECT (editor->loaded_widget),
@@ -678,6 +708,8 @@
gtk_widget_set_sensitive (editor->info_button, FALSE);
editor->loaded_widget = NULL;
+
+ g_object_notify (G_OBJECT (editor), "widget");
return;
}
gtk_widget_set_sensitive (editor->reset_button, TRUE);
@@ -705,6 +737,9 @@
editor->project_closed_signal_id =
g_signal_connect (G_OBJECT (project), "close",
G_CALLBACK (glade_editor_close_cb), editor);
+ editor->project_removed_signal_id =
+ g_signal_connect (G_OBJECT (project), "remove-widget",
+ G_CALLBACK (glade_editor_removed_cb), editor);
editor->widget_warning_id =
g_signal_connect (G_OBJECT (widget), "notify::support-warning",
G_CALLBACK (glade_editor_update_class_warning_cb),
@@ -715,6 +750,8 @@
editor);
gtk_container_check_resize (GTK_CONTAINER (editor));
+
+ g_object_notify (G_OBJECT (editor), "widget");
}
/**
@@ -1273,3 +1310,60 @@
g_object_notify (G_OBJECT (editor), "show-info");
}
}
+
+/**
+ * glade_editor_dialog_for_widget:
+ * @widget: a #GladeWidget
+ *
+ * This convenience function creates a new dialog window to edit @widget
+ * specifically.
+ *
+ * Returns: the newly created dialog window
+ */
+GtkWidget *
+glade_editor_dialog_for_widget (GladeWidget *widget)
+{
+ GtkWidget *window, *editor;
+ gchar *title, *prj_name;
+
+
+ g_return_val_if_fail (GLADE_IS_WIDGET (widget), NULL);
+
+ /* Window */
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+ prj_name = glade_project_get_name (widget->project);
+ title = g_strdup_printf ("%s - %s Properties", prj_name,
+ glade_widget_get_name (widget));
+ gtk_window_set_title (GTK_WINDOW (window), title);
+ g_free (title);
+ g_free (prj_name);
+
+
+ if (glade_app_get_accel_group ())
+ {
+ gtk_window_add_accel_group (GTK_WINDOW (window),
+ glade_app_get_accel_group ());
+ g_signal_connect (G_OBJECT (window), "key-press-event",
+ G_CALLBACK (glade_utils_hijack_key_press), NULL);
+ }
+
+ editor = g_object_new (GLADE_TYPE_EDITOR,
+ "spacing", 6,
+ NULL);
+ glade_editor_load_widget (GLADE_EDITOR (editor), widget);
+
+
+ g_signal_connect_swapped (G_OBJECT (editor), "notify::widget",
+ G_CALLBACK (gtk_widget_destroy), window);
+
+
+ gtk_container_set_border_width (GTK_CONTAINER (editor), 6);
+ gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (editor));
+
+ gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
+
+ gtk_widget_show_all (editor);
+ return window;
+}
Modified: trunk/gladeui/glade-editor.h
==============================================================================
--- trunk/gladeui/glade-editor.h (original)
+++ trunk/gladeui/glade-editor.h Sat Nov 15 19:54:46 2008
@@ -76,6 +76,8 @@
gulong project_closed_signal_id; /* Unload widget when widget's project closes.
*/
+ gulong project_removed_signal_id; /* Unload widget when its removed from the project.
+ */
gulong widget_warning_id; /* Update when widget changes warning messages.
*/
gulong widget_name_id; /* Update class field when widget name changes
@@ -130,6 +132,8 @@
GladeEditor *glade_editor_new (void);
+GtkWidget *glade_editor_dialog_for_widget (GladeWidget *widget);
+
void glade_editor_load_widget (GladeEditor *editor,
GladeWidget *widget);
Modified: trunk/gladeui/glade-inspector.c
==============================================================================
--- trunk/gladeui/glade-inspector.c (original)
+++ trunk/gladeui/glade-inspector.c Sat Nov 15 19:54:46 2008
@@ -500,8 +500,9 @@
GladeWidget *widget;
gtk_tree_model_get (model, iter, WIDGET_COLUMN, &widget, -1);
-
- glade_app_selection_add (glade_widget_get_object (widget), FALSE);
+
+ if (widget)
+ glade_app_selection_add (glade_widget_get_object (widget), FALSE);
}
static void
Modified: trunk/gladeui/glade-utils.c
==============================================================================
--- trunk/gladeui/glade-utils.c (original)
+++ trunk/gladeui/glade-utils.c Sat Nov 15 19:54:46 2008
@@ -2266,3 +2266,38 @@
return store;
}
+
+
+
+/**
+ * glade_utils_hijack_key_press:
+ * @win: a #GtkWindow
+ * event: the GdkEventKey
+ * user_data: unused
+ *
+ * This function is meant to be attached to key-press-event of a toplevel,
+ * it simply allows the window contents to treat key events /before/
+ * accelerator keys come into play (this way widgets dont get deleted
+ * when cutting text in an entry etc.).
+ * Creates a liststore suitable for comboboxes and such to
+ * chose from a variety of types.
+ *
+ * Returns: whether the event was handled
+ */
+gint
+glade_utils_hijack_key_press (GtkWindow *win,
+ GdkEventKey *event,
+ gpointer user_data)
+{
+ if (win->focus_widget &&
+ (event->keyval == GDK_Delete || /* Filter Delete from accelerator keys */
+ ((event->state & GDK_CONTROL_MASK) && /* CNTL keys... */
+ ((event->keyval == GDK_c || event->keyval == GDK_C) || /* CNTL-C (copy) */
+ (event->keyval == GDK_x || event->keyval == GDK_X) || /* CNTL-X (cut) */
+ (event->keyval == GDK_v || event->keyval == GDK_V))))) /* CNTL-V (paste) */
+ {
+ return gtk_widget_event (win->focus_widget,
+ (GdkEvent *)event);
+ }
+ return FALSE;
+}
Modified: trunk/gladeui/glade-utils.h
==============================================================================
--- trunk/gladeui/glade-utils.h (original)
+++ trunk/gladeui/glade-utils.h Sat Nov 15 19:54:46 2008
@@ -151,7 +151,10 @@
GtkListStore *glade_utils_liststore_from_enum_type (GType enum_type, gboolean include_empty);
-
+gint glade_utils_hijack_key_press (GtkWindow *win,
+ GdkEventKey *event,
+ gpointer user_data);
+
G_END_DECLS
Modified: trunk/plugins/gtk+/glade-gtk.c
==============================================================================
--- trunk/plugins/gtk+/glade-gtk.c (original)
+++ trunk/plugins/gtk+/glade-gtk.c Sat Nov 15 19:54:46 2008
@@ -1190,7 +1190,13 @@
else
gparent = NULL;
- if (strcmp (action_path, "remove_parent") == 0)
+ if (strcmp (action_path, "edit_separate") == 0)
+ {
+ GtkWidget *dialog =
+ glade_editor_dialog_for_widget (gwidget);
+ gtk_widget_show_all (dialog);
+ }
+ else if (strcmp (action_path, "remove_parent") == 0)
{
GladeWidget *new_gparent;
Modified: trunk/plugins/gtk+/gtk+.xml.in
==============================================================================
--- trunk/plugins/gtk+/gtk+.xml.in (original)
+++ trunk/plugins/gtk+/gtk+.xml.in Sat Nov 15 19:54:46 2008
@@ -28,6 +28,7 @@
</signals>
<actions>
+ <action id="edit_separate" _name="Edit Separately" stock="gtk-edit"/>
<action id="remove_parent" _name="Remove Parent" stock="gtk-remove"/>
<action id="add_parent" _name="Add Parent" stock="gtk-add">
<action id="alignment" _name="Alignment"/>
Modified: trunk/src/glade-window.c
==============================================================================
--- trunk/src/glade-window.c (original)
+++ trunk/src/glade-window.c Sat Nov 15 19:54:46 2008
@@ -1778,29 +1778,6 @@
gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
}
-/* This function is meant to be attached to key-press-event of a toplevel,
- * it simply allows the window contents to treat key events /before/
- * accelerator keys come into play (this way widgets dont get deleted
- * when cutting text in an entry etc.).
- */
-static gint
-hijack_key_press (GtkWidget *win,
- GdkEventKey *event,
- GladeWindow *window)
-{
- if (GTK_WINDOW (win)->focus_widget &&
- (event->keyval == GDK_Delete || /* Filter Delete from accelerator keys */
- ((event->state & GDK_CONTROL_MASK) && /* CNTL keys... */
- ((event->keyval == GDK_c || event->keyval == GDK_C) || /* CNTL-C (copy) */
- (event->keyval == GDK_x || event->keyval == GDK_X) || /* CNTL-X (cut) */
- (event->keyval == GDK_v || event->keyval == GDK_V))))) /* CNTL-V (paste) */
- {
- return gtk_widget_event (GTK_WINDOW (win)->focus_widget,
- (GdkEvent *)event);
- }
- return FALSE;
-}
-
static gboolean
on_dock_deleted (GtkWidget *widget,
GdkEvent *event,
@@ -1894,7 +1871,7 @@
gtk_ui_manager_get_accel_group (window->priv->ui));
g_signal_connect (G_OBJECT (toplevel), "key-press-event",
- G_CALLBACK (hijack_key_press), window);
+ G_CALLBACK (glade_utils_hijack_key_press), window);
dock->detached = TRUE;
@@ -3157,7 +3134,7 @@
window);
g_signal_connect (G_OBJECT (window), "key-press-event",
- G_CALLBACK (hijack_key_press), window);
+ G_CALLBACK (glade_utils_hijack_key_press), window);
/* GladeApp signals */
g_signal_connect (G_OBJECT (priv->app), "update-ui",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]