From 29a72559c652e5eebc94aa05daa922757d54015e Mon Sep 17 00:00:00 2001 From: Paolo Borelli Date: Sat, 21 Jun 2003 11:50:51 +0000 Subject: [PATCH] When selection changes, change the current project to the one of the new selection. --- ChangeLog | 10 ++++-- src/glade-placeholder.c | 23 +++++++------ src/glade-project-window.c | 67 +++++++++++++++++++++----------------- src/glade-project-window.h | 2 -- src/glade-project.c | 19 ++++++----- src/glade-widget.c | 3 -- 6 files changed, 69 insertions(+), 55 deletions(-) diff --git a/ChangeLog b/ChangeLog index 99c9608f..9ac94a78 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,15 @@ +2003-06-21 Paolo Borelli + + * src/glade-placeholder.c: fix return values for mouse + events callbacks. + * src/glade-project-window.[ch]: when selecting a widget + of another project the current project change. + * src/glade-widget.c: remove unused var. + 2003-06-21 Joaquin Cuenca Abela * src/glade-placeholder.c: remove unused function. - * src/glade-utils.c: fix indentation and such. - * src/glade-widget.c: remove unused function. 2003-06-21 Joaquin Cuenca Abela diff --git a/src/glade-placeholder.c b/src/glade-placeholder.c index bf126519..dc677020 100644 --- a/src/glade-placeholder.c +++ b/src/glade-placeholder.c @@ -159,7 +159,7 @@ glade_placeholder_add_methods_to_class (GladeWidgetClass *class) class->placeholder_replace = glade_placeholder_replace_container; } -static void +static gboolean glade_placeholder_on_button_press_event (GladePlaceholder *placeholder, GdkEventButton *event, gpointer not_used) @@ -167,25 +167,26 @@ glade_placeholder_on_button_press_event (GladePlaceholder *placeholder, GladeProjectWindow *gpw = glade_project_window_get (); if (event->button == 1 && event->type == GDK_BUTTON_PRESS) { - if (gpw->add_class != NULL) { - /* - * A widget type is selected in the palette. + /* A widget type is selected in the palette. * Add a new widget of that type. */ glade_command_create (gpw->add_class, placeholder, NULL); glade_project_window_set_add_class (gpw, NULL); } else { - /* else set the current placeholder as selected */ - glade_project_selection_set (gpw->project, placeholder, FALSE); + GladeWidget *parent = glade_placeholder_get_parent (placeholder); + glade_project_selection_set (parent->project, placeholder, TRUE); } - } else if (event->button == 3) { + } else if (event->button == 3) glade_popup_placeholder_pop (placeholder, event); - } + + return TRUE; } -static void -glade_placeholder_on_motion_notify_event (GladePlaceholder *placeholder, GdkEventMotion *event, gpointer not_used) +static gboolean +glade_placeholder_on_motion_notify_event (GladePlaceholder *placeholder, + GdkEventMotion *event, + gpointer not_used) { GladeProjectWindow *gpw; @@ -195,6 +196,8 @@ glade_placeholder_on_motion_notify_event (GladePlaceholder *placeholder, GdkEven glade_cursor_set (event->window, GLADE_CURSOR_SELECTOR); else glade_cursor_set (event->window, GLADE_CURSOR_ADD_WIDGET); + + return FALSE; } static gboolean diff --git a/src/glade-project-window.c b/src/glade-project-window.c index 8ba7bf28..940c963b 100644 --- a/src/glade-project-window.c +++ b/src/glade-project-window.c @@ -1076,26 +1076,6 @@ glade_project_window_new (GList *catalogs) return gpw; } -static void -glade_project_window_selection_changed_cb (GladeProject *project, - GladeProjectWindow *gpw) -{ - GList *list; - gint num; - - g_return_if_fail (GLADE_IS_PROJECT (project)); - g_return_if_fail (GLADE_IS_PROJECT_WINDOW (gpw)); - - if (gpw->editor) { - list = glade_project_selection_get (project); - num = g_list_length (list); - if (num == 1 && !GLADE_IS_PLACEHOLDER (list->data)) - glade_editor_load_widget (gpw->editor, glade_widget_get_from_gtk_widget (GTK_WIDGET (list->data))); - else - glade_editor_load_widget (gpw->editor, NULL); - } -} - void glade_project_window_set_project (GladeProject *project) { @@ -1107,12 +1087,19 @@ glade_project_window_set_project (GladeProject *project) gpw = glade_project_window_get (); + if (gpw->project == project) + return; + if (g_list_find (gpw->projects, project) == NULL) { g_warning ("Could not set project because it could not " " be found in the gpw->project list\n"); return; } - + + /* clear the selection in the previous project */ + if (gpw->project) + glade_project_selection_clear (gpw->project, FALSE); + gpw->project = project; gpw_refresh_title (gpw); @@ -1122,11 +1109,7 @@ glade_project_window_set_project (GladeProject *project) glade_project_view_set_project (view, project); } - gpw->project_selection_changed_signal = - g_signal_connect (G_OBJECT (project), "selection_changed", - G_CALLBACK (glade_project_window_selection_changed_cb), - gpw); - + /* trigger the selection changed signal to update the editor */ glade_project_selection_changed (project); } @@ -1136,6 +1119,31 @@ gpw_widget_name_changed_cb (GladeProject *project, GladeWidget *widget, GladeEdi glade_editor_update_widget_name (editor); } +static void +gpw_project_selection_changed_cb (GladeProject *project, + GladeProjectWindow *gpw) +{ + GList *list; + gint num; + + g_return_if_fail (GLADE_IS_PROJECT (project)); + g_return_if_fail (GLADE_IS_PROJECT_WINDOW (gpw)); + + if (gpw->project != project) { + glade_project_window_set_project (project); + return; + } + + if (gpw->editor) { + list = glade_project_selection_get (project); + num = g_list_length (list); + if (num == 1 && !GLADE_IS_PLACEHOLDER (list->data)) + glade_editor_load_widget (gpw->editor, glade_widget_get_from_gtk_widget (GTK_WIDGET (list->data))); + else + glade_editor_load_widget (gpw->editor, NULL); + } +} + void glade_project_window_add_project (GladeProject *project) { @@ -1175,11 +1183,12 @@ glade_project_window_add_project (GladeProject *project) gtk_item_factory_create_item (gpw->item_factory, &(project->entry), project, 1); - /* connect the widget_changed_name signal to the editor, so that changes to the widget - * name external to the properties editor (as when the user undo a widget name change) - * are reflected on the widget name entry */ + /* connect to the project signals so that the editor can be updated */ g_signal_connect (G_OBJECT (project), "widget_name_changed", G_CALLBACK (gpw_widget_name_changed_cb), gpw->editor); + g_signal_connect (G_OBJECT (project), "selection_changed", + G_CALLBACK (gpw_project_selection_changed_cb), gpw); + glade_project_window_set_project (project); } diff --git a/src/glade-project-window.h b/src/glade-project-window.h index 5734249d..b2a61229 100644 --- a/src/glade-project-window.h +++ b/src/glade-project-window.h @@ -44,8 +44,6 @@ struct _GladeProjectWindow GList *views; /* A list of GladeProjectView item */ GList *projects; /* The list of Projects */ - - guint project_selection_changed_signal; }; diff --git a/src/glade-project.c b/src/glade-project.c index a5b75ff4..2e0bc9a0 100644 --- a/src/glade-project.c +++ b/src/glade-project.c @@ -332,7 +332,7 @@ glade_project_selection_clear (GladeProject *project, gboolean emit_signal) { GtkWidget *widget; GList *list; - + g_return_if_fail (GLADE_IS_PROJECT (project)); if (project->selection == NULL) @@ -343,7 +343,7 @@ glade_project_selection_clear (GladeProject *project, gboolean emit_signal) widget = list->data; glade_util_remove_nodes (widget); } - + g_list_free (project->selection); project->selection = NULL; @@ -352,7 +352,8 @@ glade_project_selection_clear (GladeProject *project, gboolean emit_signal) } void -glade_project_selection_remove (GladeProject *project, GtkWidget *widget, +glade_project_selection_remove (GladeProject *project, + GtkWidget *widget, gboolean emit_signal) { if (!glade_util_has_nodes (widget)) @@ -360,8 +361,7 @@ glade_project_selection_remove (GladeProject *project, GtkWidget *widget, glade_util_remove_nodes (widget); - if (project) - { + if (project) { project->selection = g_list_remove (project->selection, widget); if (emit_signal) @@ -370,7 +370,8 @@ glade_project_selection_remove (GladeProject *project, GtkWidget *widget, } void -glade_project_selection_add (GladeProject *project, GtkWidget *widget, +glade_project_selection_add (GladeProject *project, + GtkWidget *widget, gboolean emit_signal) { if (glade_util_has_nodes (widget)) @@ -378,8 +379,7 @@ glade_project_selection_add (GladeProject *project, GtkWidget *widget, glade_util_add_nodes (widget); - if (project) - { + if (project) { project->selection = g_list_prepend (project->selection, widget); if (emit_signal) @@ -388,7 +388,8 @@ glade_project_selection_add (GladeProject *project, GtkWidget *widget, } void -glade_project_selection_set (GladeProject *project, GtkWidget *widget, +glade_project_selection_set (GladeProject *project, + GtkWidget *widget, gboolean emit_signal) { if (glade_util_has_nodes (widget)) diff --git a/src/glade-widget.c b/src/glade-widget.c index 7a1b785c..54164468 100644 --- a/src/glade-widget.c +++ b/src/glade-widget.c @@ -280,7 +280,6 @@ glade_widget_button_press (GtkWidget *event_widget, GdkEventButton *event, gpointer not_used) { - GladeProjectWindow *gpw; GladeWidget *glade_widget; glade_widget = glade_widget_get_from_event_widget (event_widget, event); @@ -309,8 +308,6 @@ glade_widget_button_press (GtkWidget *event_widget, g_debug(("The widget found was a %s\n", glade_widget->class->name)); - gpw = glade_project_window_get (); - return FALSE; }