Commit e37b0289 authored by Tristan Van Berkom's avatar Tristan Van Berkom
Browse files

* gladeui/glade-utils.[ch], gladeui/glade-widget.c, gladeui/glade-project.c,

	gladeui/glade-popup.c, gladeui/glade-placeholder.c: Removed global selection list
	from glade-utils, selection can only be placed on widgets and only be controlled
	by their owning project.
parent b7456a23
......@@ -6,6 +6,11 @@
* gladeui/glade-utils.[ch]: Some cleanup in glade-utils, removed lots of obsolete stuff.
* gladeui/glade-utils.[ch], gladeui/glade-widget.c, gladeui/glade-project.c,
gladeui/glade-popup.c, gladeui/glade-placeholder.c: Removed global selection list
from glade-utils, selection can only be placed on widgets and only be controlled
by their owning project.
2011-01-07 Emilio Pozuelo Monfort <pochu27@gmail.com>
* configure.ac: Bump the minimum GTK+ version to 2.99.0.
......
......@@ -392,8 +392,6 @@ glade_placeholder_draw (GtkWidget * widget, cairo_t * cr)
glade_utils_cairo_draw_line (cr, dark, 0, h - 1, w - 1, h - 1);
glade_utils_cairo_draw_line (cr, dark, w - 1, 0, w - 1, h - 1);
glade_util_draw_selection_nodes (widget, cr);
return FALSE;
}
......
......@@ -54,7 +54,6 @@ glade_popup_docs_cb (GtkMenuItem * item, GladeWidgetAdaptor * adaptor)
static void
glade_popup_select_cb (GtkMenuItem * item, GladeWidget * widget)
{
glade_util_clear_selection ();
glade_project_selection_set (glade_widget_get_project (widget),
glade_widget_get_object (widget), TRUE);
}
......@@ -132,8 +131,6 @@ glade_popup_cut_cb (GtkMenuItem * item, GladeWidget * widget)
{
GladeProject *project = glade_widget_get_project (widget);
glade_util_clear_selection ();
/* Assign selection first only if its not already assigned (it may be a delete
* of multiple widgets) */
if (!glade_project_is_selected (project, glade_widget_get_object (widget)))
......@@ -147,10 +144,8 @@ glade_popup_copy_cb (GtkMenuItem * item, GladeWidget * widget)
{
GladeProject *project = glade_widget_get_project (widget);
glade_util_clear_selection ();
/* Assign selection first */
if (glade_project_is_selected (project, glade_widget_get_object (widget)) == FALSE)
if (!glade_project_is_selected (project, glade_widget_get_object (widget)))
glade_project_selection_set (project, glade_widget_get_object (widget), FALSE);
glade_project_copy_selection (project);
......@@ -172,8 +167,6 @@ glade_popup_paste_cb (GtkMenuItem * item, gpointer data)
else
g_return_if_reached ();
glade_util_clear_selection ();
/* The selected widget is the paste destination */
if (widget)
glade_project_selection_set (project, glade_widget_get_object (widget), FALSE);
......@@ -207,7 +200,6 @@ glade_popup_placeholder_paste_cb (GtkMenuItem * item,
project = glade_placeholder_get_project (placeholder);
glade_util_clear_selection ();
glade_project_selection_clear (project, FALSE);
glade_project_command_paste (project, placeholder);
......
......@@ -887,7 +887,7 @@ glade_project_class_init (GladeProjectClass * klass)
G_TYPE_NONE, 1, GLADE_TYPE_WIDGET);
/**
/**
* GladeProject::selection-changed:
* @gladeproject: the #GladeProject which received the signal.
*
......@@ -3329,11 +3329,18 @@ glade_project_is_selected (GladeProject * project, GObject * object)
void
glade_project_selection_clear (GladeProject * project, gboolean emit_signal)
{
GList *l;
g_return_if_fail (GLADE_IS_PROJECT (project));
if (project->priv->selection == NULL)
return;
glade_util_clear_selection ();
for (l = project->priv->selection; l; l = l->next)
{
if (GTK_IS_WIDGET (l->data))
gtk_widget_queue_draw (GTK_WIDGET (l->data));
}
g_list_free (project->priv->selection);
project->priv->selection = NULL;
......@@ -3363,8 +3370,6 @@ glade_project_selection_remove (GladeProject * project,
if (glade_project_is_selected (project, object))
{
if (GTK_IS_WIDGET (object))
glade_util_remove_selection (GTK_WIDGET (object));
project->priv->selection =
g_list_remove (project->priv->selection, object);
if (project->priv->selection == NULL)
......@@ -3398,7 +3403,7 @@ glade_project_selection_add (GladeProject * project,
gboolean toggle_has_selection = (project->priv->selection == NULL);
if (GTK_IS_WIDGET (object))
glade_util_add_selection (GTK_WIDGET (object));
gtk_widget_queue_draw (GTK_WIDGET (object));
project->priv->selection =
g_list_prepend (project->priv->selection, object);
......@@ -3428,9 +3433,7 @@ glade_project_selection_set (GladeProject * project,
{
g_return_if_fail (GLADE_IS_PROJECT (project));
g_return_if_fail (G_IS_OBJECT (object));
if (!glade_project_has_object (project, object))
return;
g_return_if_fail (glade_project_has_object (project, object));
if (glade_project_is_selected (project, object) == FALSE ||
g_list_length (project->priv->selection) != 1)
......
......@@ -57,10 +57,6 @@
#define GLADE_UTIL_COPY_BUFFSIZE 1024
/* List of widgets that have selection
*/
static GList *glade_util_selection = NULL;
/**
* glade_util_compose_get_type_func:
* @name:
......@@ -613,114 +609,32 @@ glade_util_draw_nodes (cairo_t * cr, GdkColor * color,
void
glade_util_draw_selection_nodes (GtkWidget * widget, cairo_t * cr)
{
GladeWidget *gwidget;
GladeProject *project;
GdkColor *color;
GtkAllocation allocation;
g_return_if_fail (GTK_IS_WIDGET (widget));
cairo_save (cr);
color = &(gtk_widget_get_style (widget)->black);
if (g_list_find (glade_util_selection, widget))
{
GtkAllocation allocation;
gtk_widget_get_allocation (widget, &allocation);
glade_util_draw_nodes (cr, color,
0, 0, allocation.width, allocation.height);
}
cairo_restore (cr);
}
/**
* glade_util_add_selection:
* @widget: a #GtkWidget
*
* Add visual selection to this GtkWidget
*/
void
glade_util_add_selection (GtkWidget * widget)
{
g_return_if_fail (GTK_IS_WIDGET (widget));
if (glade_util_has_selection (widget))
gwidget = glade_widget_get_from_gobject (widget);
if (!gwidget)
return;
glade_util_selection = g_list_prepend (glade_util_selection, widget);
gtk_widget_queue_draw (widget);
}
/**
* glade_util_remove_selection:
* @widget: a #GtkWidget
*
* Remove visual selection from this GtkWidget
*/
void
glade_util_remove_selection (GtkWidget * widget)
{
GtkWidget *parent;
project = glade_widget_get_project (gwidget);
g_return_if_fail (GLADE_IS_PROJECT (project));
g_return_if_fail (GTK_IS_WIDGET (widget));
if (!glade_util_has_selection (widget))
if (!glade_project_is_selected (project, G_OBJECT (widget)))
return;
glade_util_selection = g_list_remove (glade_util_selection, widget);
/* We redraw the parent, since the selection rectangle may not be
cleared if we just redraw the widget itself. */
parent = gtk_widget_get_parent (widget);
if (parent)
gtk_widget_queue_draw (parent);
gtk_widget_queue_draw (widget);
}
/**
* glade_util_clear_selection:
*
* Clear all visual selections
*/
void
glade_util_clear_selection (void)
{
GtkWidget *widget;
GtkWidget *parent;
GList *list;
for (list = glade_util_selection; list && list->data; list = list->next)
{
widget = list->data;
parent = gtk_widget_get_parent (widget);
cairo_save (cr);
if (parent)
gtk_widget_queue_draw (parent);
gtk_widget_queue_draw (widget);
}
glade_util_selection = (g_list_free (glade_util_selection), NULL);
}
color = &(gtk_widget_get_style (widget)->black);
/**
* glade_util_has_selection:
* @widget: a #GtkWidget
*
* Returns: %TRUE if @widget has visual selection, %FALSE otherwise
*/
gboolean
glade_util_has_selection (GtkWidget * widget)
{
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
return g_list_find (glade_util_selection, widget) != NULL;
}
gtk_widget_get_allocation (widget, &allocation);
glade_util_draw_nodes (cr, color,
0, 0, allocation.width, allocation.height);
/**
* glade_util_get_selectoin:
*
* Returns: The list of selected #GtkWidgets
*/
GList *
glade_util_get_selection ()
{
return glade_util_selection;
cairo_restore (cr);
}
/*
......
......@@ -66,13 +66,6 @@ GValue *glade_utils_value_from_string (GType type,
GladeWidget *widget);
gchar *glade_utils_string_from_value (const GValue *value);
/* Selection (TODO, Move to GladeProject) */
void glade_util_add_selection (GtkWidget *widget);
void glade_util_remove_selection (GtkWidget *widget);
gboolean glade_util_has_selection (GtkWidget *widget);
void glade_util_clear_selection (void);
GList *glade_util_get_selection (void);
/* Devhelp */
gboolean glade_util_have_devhelp (void);
GtkWidget *glade_util_get_devhelp_icon (GtkIconSize size);
......
......@@ -428,7 +428,6 @@ glade_widget_button_press_event_impl (GladeWidget * gwidget,
else if (glade_project_is_selected (gwidget->priv->project,
gwidget->priv->object) == FALSE)
{
glade_util_clear_selection ();
glade_project_selection_set (gwidget->priv->project,
gwidget->priv->object, TRUE);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment