removed all component item signal handling code, which is cool...

2002-08-28  Michael Natterer  <mitch@gimp.org>

	* app/widgets/gimpchannellistview.c: removed all component item
	signal handling code, which is cool...

	* app/widgets/gimpcomponentlistitem.c: ...and added it here, which
	is not so cool because it adds Extra Ugliness (TM). At least it
	fixes part one of #90967.
This commit is contained in:
Michael Natterer 2002-08-28 18:28:16 +00:00 committed by Michael Natterer
parent 698bd613cc
commit 9d0bfc516b
4 changed files with 114 additions and 166 deletions

View File

@ -1,3 +1,12 @@
2002-08-28 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpchannellistview.c: removed all component item
signal handling code, which is cool...
* app/widgets/gimpcomponentlistitem.c: ...and added it here, which
is not so cool because it adds Extra Ugliness (TM). At least it
fixes part one of #90967.
2002-08-28 Michael Natterer <mitch@gimp.org>
* app/undo.c (undo_pop_layer)

View File

@ -76,11 +76,6 @@ static void gimp_channel_list_view_mode_changed (GimpImage *gimage
static void gimp_channel_list_view_alpha_changed (GimpImage *gimage,
GimpChannelListView *view);
static void gimp_channel_list_view_component_toggle
(GtkList *list,
GtkWidget *child,
GimpChannelListView *view);
static GimpDrawableListViewClass *parent_class = NULL;
@ -150,7 +145,7 @@ gimp_channel_list_view_init (GimpChannelListView *view)
view->component_list = gtk_list_new ();
/* FIXME: disable keyboard navigation because as of gtk+-2.0.3,
* GtkList kb navogation with is h-o-r-r-i-b-l-y broken with
* GtkList kb navigation with is h-o-r-r-i-b-l-y broken with
* GTK_SELECTION_MULTIPLE --mitch 05/27/2002
*/
GTK_WIDGET_UNSET_FLAGS (view->component_list, GTK_CAN_FOCUS);
@ -161,15 +156,7 @@ gimp_channel_list_view_init (GimpChannelListView *view)
view->component_list);
gtk_widget_show (view->component_list);
g_signal_connect (G_OBJECT (view->component_list), "select_child",
G_CALLBACK (gimp_channel_list_view_component_toggle),
view);
g_signal_connect (G_OBJECT (view->component_list), "unselect_child",
G_CALLBACK (gimp_channel_list_view_component_toggle),
view);
/* To Selection button */
view->toselection_button =
gimp_editor_add_button (GIMP_EDITOR (container_view),
GIMP_STOCK_SELECTION_REPLACE,
@ -385,31 +372,14 @@ gimp_channel_list_view_create_components (GimpChannelListView *view)
list = g_list_append (list, list_item);
}
g_signal_handlers_block_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
gtk_list_insert_items (GTK_LIST (view->component_list), list, 0);
g_signal_handlers_unblock_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
gtk_widget_queue_resize (GTK_WIDGET (view->component_frame));
}
static void
gimp_channel_list_view_clear_components (GimpChannelListView *view)
{
g_signal_handlers_block_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
gtk_list_clear_items (GTK_LIST (view->component_list), 0, -1);
g_signal_handlers_unblock_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
}
static void
@ -427,35 +397,3 @@ gimp_channel_list_view_alpha_changed (GimpImage *gimage,
gimp_channel_list_view_clear_components (view);
gimp_channel_list_view_create_components (view);
}
static void
gimp_channel_list_view_component_toggle (GtkList *list,
GtkWidget *child,
GimpChannelListView *view)
{
GimpComponentListItem *component_item;
GimpImage *gimage;
gboolean active;
component_item = GIMP_COMPONENT_LIST_ITEM (child);
gimage = GIMP_ITEM_LIST_VIEW (view)->gimage;
#if 0
g_print ("gimp_channel_list_view_component_toggle: channel: %d selected: %d\n",
component_item->channel, child->state == GTK_STATE_SELECTED);
#endif
active = gimp_image_get_component_active (gimage, component_item->channel);
g_signal_handlers_block_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
gimp_image_set_component_active (gimage,
component_item->channel,
! active);
g_signal_handlers_unblock_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
}

View File

@ -76,11 +76,6 @@ static void gimp_channel_list_view_mode_changed (GimpImage *gimage
static void gimp_channel_list_view_alpha_changed (GimpImage *gimage,
GimpChannelListView *view);
static void gimp_channel_list_view_component_toggle
(GtkList *list,
GtkWidget *child,
GimpChannelListView *view);
static GimpDrawableListViewClass *parent_class = NULL;
@ -150,7 +145,7 @@ gimp_channel_list_view_init (GimpChannelListView *view)
view->component_list = gtk_list_new ();
/* FIXME: disable keyboard navigation because as of gtk+-2.0.3,
* GtkList kb navogation with is h-o-r-r-i-b-l-y broken with
* GtkList kb navigation with is h-o-r-r-i-b-l-y broken with
* GTK_SELECTION_MULTIPLE --mitch 05/27/2002
*/
GTK_WIDGET_UNSET_FLAGS (view->component_list, GTK_CAN_FOCUS);
@ -161,15 +156,7 @@ gimp_channel_list_view_init (GimpChannelListView *view)
view->component_list);
gtk_widget_show (view->component_list);
g_signal_connect (G_OBJECT (view->component_list), "select_child",
G_CALLBACK (gimp_channel_list_view_component_toggle),
view);
g_signal_connect (G_OBJECT (view->component_list), "unselect_child",
G_CALLBACK (gimp_channel_list_view_component_toggle),
view);
/* To Selection button */
view->toselection_button =
gimp_editor_add_button (GIMP_EDITOR (container_view),
GIMP_STOCK_SELECTION_REPLACE,
@ -385,31 +372,14 @@ gimp_channel_list_view_create_components (GimpChannelListView *view)
list = g_list_append (list, list_item);
}
g_signal_handlers_block_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
gtk_list_insert_items (GTK_LIST (view->component_list), list, 0);
g_signal_handlers_unblock_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
gtk_widget_queue_resize (GTK_WIDGET (view->component_frame));
}
static void
gimp_channel_list_view_clear_components (GimpChannelListView *view)
{
g_signal_handlers_block_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
gtk_list_clear_items (GTK_LIST (view->component_list), 0, -1);
g_signal_handlers_unblock_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
}
static void
@ -427,35 +397,3 @@ gimp_channel_list_view_alpha_changed (GimpImage *gimage,
gimp_channel_list_view_clear_components (view);
gimp_channel_list_view_create_components (view);
}
static void
gimp_channel_list_view_component_toggle (GtkList *list,
GtkWidget *child,
GimpChannelListView *view)
{
GimpComponentListItem *component_item;
GimpImage *gimage;
gboolean active;
component_item = GIMP_COMPONENT_LIST_ITEM (child);
gimage = GIMP_ITEM_LIST_VIEW (view)->gimage;
#if 0
g_print ("gimp_channel_list_view_component_toggle: channel: %d selected: %d\n",
component_item->channel, child->state == GTK_STATE_SELECTED);
#endif
active = gimp_image_get_component_active (gimage, component_item->channel);
g_signal_handlers_block_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
gimp_image_set_component_active (gimage,
component_item->channel,
! active);
g_signal_handlers_unblock_by_func (G_OBJECT (view->component_list),
gimp_channel_list_view_component_toggle,
view);
}

View File

@ -46,10 +46,12 @@ static void gimp_component_list_item_set_viewable (GimpListItem *list_item
static void gimp_component_list_item_eye_toggled (GtkWidget *widget,
gpointer data);
#if 0
static void gimp_component_list_item_toggled (GtkWidget *widget,
gpointer data);
#endif
static gboolean gimp_component_list_item_button_press (GtkWidget *widget,
GdkEventButton *bevent);
static gboolean gimp_component_list_item_button_release (GtkWidget *widget,
GdkEventButton *bevent);
static void gimp_component_list_item_visibility_changed
(GimpImage *gimage,
@ -99,13 +101,18 @@ gimp_component_list_item_get_type (void)
static void
gimp_component_list_item_class_init (GimpComponentListItemClass *klass)
{
GtkWidgetClass *widget_class;
GimpListItemClass *list_item_class;
widget_class = GTK_WIDGET_CLASS (klass);
list_item_class = GIMP_LIST_ITEM_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
list_item_class->set_viewable = gimp_component_list_item_set_viewable;
widget_class->button_press_event = gimp_component_list_item_button_press;
widget_class->button_release_event = gimp_component_list_item_button_release;
list_item_class->set_viewable = gimp_component_list_item_set_viewable;
}
static void
@ -144,6 +151,16 @@ gimp_component_list_item_init (GimpComponentListItem *list_item)
GTK_ICON_SIZE_BUTTON);
gtk_container_add (GTK_CONTAINER (list_item->eye_button), image);
gtk_widget_show (image);
g_signal_connect_after (G_OBJECT (list_item), "select",
G_CALLBACK (gimp_component_list_item_toggled),
NULL);
g_signal_connect_after (G_OBJECT (list_item), "deselect",
G_CALLBACK (gimp_component_list_item_toggled),
NULL);
g_signal_connect_after (G_OBJECT (list_item), "toggle",
G_CALLBACK (gimp_component_list_item_toggled),
NULL);
}
GtkWidget *
@ -235,18 +252,6 @@ gimp_component_list_item_set_viewable (GimpListItem *list_item,
G_CALLBACK (gimp_component_list_item_active_changed),
G_OBJECT (list_item),
0);
#if 0
g_signal_connect_after (G_OBJECT (list_item), "select",
G_CALLBACK (gimp_component_list_item_toggled),
NULL);
g_signal_connect_after (G_OBJECT (list_item), "deselect",
G_CALLBACK (gimp_component_list_item_toggled),
NULL);
g_signal_connect_after (G_OBJECT (list_item), "toggle",
G_CALLBACK (gimp_component_list_item_toggled),
NULL);
#endif
}
static void
@ -294,10 +299,31 @@ gimp_component_list_item_eye_toggled (GtkWidget *widget,
}
}
#if 0
static void
gimp_component_list_item_toggled (GtkWidget *widget,
gpointer data)
static gboolean
gimp_component_list_item_button_press (GtkWidget *widget,
GdkEventButton *bevent)
{
GimpComponentListItem *component_item;
GimpListItem *list_item;
GimpImage *gimage;
component_item = GIMP_COMPONENT_LIST_ITEM (widget);
list_item = GIMP_LIST_ITEM (widget);
gimage = GIMP_IMAGE (GIMP_PREVIEW (list_item->preview)->viewable);
if (bevent->button == 1 && bevent->type == GDK_BUTTON_PRESS)
{
gtk_grab_add (widget);
return TRUE;
}
return FALSE;
}
static gboolean
gimp_component_list_item_button_release (GtkWidget *widget,
GdkEventButton *bevent)
{
GimpComponentListItem *component_item;
GimpListItem *list_item;
@ -310,24 +336,59 @@ gimp_component_list_item_toggled (GtkWidget *widget,
active = (widget->state == GTK_STATE_SELECTED);
if (active != gimp_image_get_component_active (gimage,
component_item->channel))
if (bevent->button == 1 && GTK_WIDGET_HAS_GRAB (widget))
{
g_signal_handlers_block_by_func (G_OBJECT (gimage),
gimp_component_list_item_active_changed,
list_item);
GtkWidget *event_widget;
gimp_image_set_component_active (gimage, component_item->channel,
active);
gtk_grab_remove (widget);
g_signal_handlers_unblock_by_func (G_OBJECT (gimage),
gimp_component_list_item_active_changed,
list_item);
event_widget = gtk_get_event_widget ((GdkEvent *) bevent);
gimp_image_flush (gimage);
/* eek */
if (event_widget &&
event_widget->parent &&
(widget == event_widget ||
widget == event_widget->parent ||
widget == event_widget->parent->parent))
{
gimp_image_set_component_active (gimage,
component_item->channel,
! active);
}
return TRUE;
}
return FALSE;
}
static void
gimp_component_list_item_toggled (GtkWidget *widget,
gpointer data)
{
GimpComponentListItem *component_item;
GimpListItem *list_item;
GimpImage *gimage;
gboolean active;
gboolean component_active;
component_item = GIMP_COMPONENT_LIST_ITEM (widget);
list_item = GIMP_LIST_ITEM (widget);
gimage = GIMP_IMAGE (GIMP_PREVIEW (list_item->preview)->viewable);
active = (widget->state == GTK_STATE_SELECTED);
component_active = gimp_image_get_component_active (gimage,
component_item->channel);
if (active != component_active)
{
if (component_active)
gtk_item_select (GTK_ITEM (list_item));
else
gtk_item_deselect (GTK_ITEM (list_item));
}
}
#endif
static void
gimp_component_list_item_visibility_changed (GimpImage *gimage,
@ -383,23 +444,25 @@ gimp_component_list_item_active_changed (GimpImage *gimage,
{
GimpComponentListItem *component_item;
gboolean active;
gboolean component_active;
component_item = GIMP_COMPONENT_LIST_ITEM (data);
if (channel != component_item->channel)
return;
active = gimp_image_get_component_active (gimage, component_item->channel);
active = (GTK_WIDGET (data)->state == GTK_STATE_SELECTED);
#if 0
g_print ("gimp_component_list_item_active_changed: channel: %d active: %d\n",
channel, active);
#endif
component_active = gimp_image_get_component_active (gimage,
component_item->channel);
if (active)
gtk_item_select (GTK_ITEM (data));
else
gtk_item_deselect (GTK_ITEM (data));
if (active != component_active)
{
if (component_active)
gtk_item_select (GTK_ITEM (data));
else
gtk_item_deselect (GTK_ITEM (data));
}
}
static gchar *