removed the "Select Tab" menu and all the evil hacks that were needed to

2003-10-18  Sven Neumann  <sven@gimp.org>

	* app/widgets/gimpdockbook.c: removed the "Select Tab" menu and
	all the evil hacks that were needed to make it work. Now that we
	have an extra dockable menu, the standard menu from GTK+ is good
	enough.

	* app/widgets/gimpdockable.c: added a tooltip to the close button
	and removed code that used to hide the "Select Tab" menu.

	* app/gui/dialogs-menu.c (dialogs_menu_entries): removed now unused
	"Select Tab" entry.
This commit is contained in:
Sven Neumann 2003-10-18 22:12:32 +00:00 committed by Sven Neumann
parent 8c26afbb1f
commit 5b84acdc81
6 changed files with 30 additions and 181 deletions

View file

@ -1,3 +1,16 @@
2003-10-18 Sven Neumann <sven@gimp.org>
* app/widgets/gimpdockbook.c: removed the "Select Tab" menu and
all the evil hacks that were needed to make it work. Now that we
have an extra dockable menu, the standard menu from GTK+ is good
enough.
* app/widgets/gimpdockable.c: added a tooltip to the close button
and removed code that used to hide the "Select Tab" menu.
* app/gui/dialogs-menu.c (dialogs_menu_entries): removed now unused
"Select Tab" entry.
2003-10-18 Dave Neary <bolsh@gimp.org>
* plug-ins/common/despeckle.c

View file

@ -63,9 +63,6 @@ GimpItemFactoryEntry dialogs_menu_entries[] =
"<StockItem>", GTK_STOCK_MISSING_IMAGE },
NULL, NULL, NULL },
{ { N_("/_Select Tab"), NULL, NULL, 0 },
NULL, NULL, NULL },
MENU_BRANCH (N_("/_Add Tab")),
ADD_TAB (N_("/Add Tab/Tool _Options"), "gimp-tool-options",

View file

@ -38,6 +38,8 @@
#include "gimpitemfactory.h"
#include "gimpwidgets-utils.h"
#include "gimp-intl.h"
static void gimp_dockable_class_init (GimpDockableClass *klass);
static void gimp_dockable_init (GimpDockable *dockable);
@ -196,6 +198,8 @@ gimp_dockable_init (GimpDockable *dockable)
gtk_button_set_relief (GTK_BUTTON (dockable->close_button), GTK_RELIEF_NONE);
gtk_widget_show (dockable->close_button);
gimp_help_set_help_data (dockable->close_button, _("Close this Tab"), NULL);
image = gtk_image_new_from_stock (GIMP_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
gtk_container_add (GTK_CONTAINER (dockable->close_button), image);
gtk_widget_show (image);
@ -888,9 +892,6 @@ gimp_dockable_show_menu (GimpDockable *dockable)
"/dialog-menu", FALSE);
}
gimp_item_factory_set_visible (GTK_ITEM_FACTORY (dockbook_item_factory),
"/Select Tab", FALSE);
/* an item factory callback may destroy both dockable and dockbook,
* so reference them for gimp_dockable_menu_end()
*/

View file

@ -78,14 +78,6 @@ static void gimp_dockbook_dockable_removed (GimpDockbook *dockbook,
static void gimp_dockbook_update_tabs (GimpDockbook *dockbook,
gboolean added);
static void gimp_dockbook_menu_switch_page (GtkWidget *widget,
GimpDockable *dockable);
static void gimp_dockbook_menu_end (GimpDockbook *dockbook);
static void gimp_dockbook_menu_detacher (GtkWidget *widget,
GtkMenu *menu);
static gboolean gimp_dockbook_tab_button_press (GtkWidget *widget,
GdkEventButton *bevent,
gpointer data);
static void gimp_dockbook_tab_drag_begin (GtkWidget *widget,
GdkDragContext *context,
gpointer data);
@ -375,54 +367,6 @@ gimp_dockbook_add (GimpDockbook *dockbook,
position);
}
/* Now this is evil: GtkNotebook's menu_item "activate" callback
* gets it's notebook context from gtk_menu_get_attach_widget()
* which badly fails because we hijacked the menu and attached it
* to our own item_factory menu. As a workaround, we disconnect
* gtk's handler and install our own. --Mitch
*/
{
GtkWidget *menu_item;
GList *widget_list, *free_list;
GList *page_list;
menu_item = menu_widget->parent;
free_list = gtk_container_get_children (GTK_CONTAINER (dockbook));
/* EEK: we rely a 1:1 and left-to-right mapping of
* gtk_container_get_children() and notebook->children
*/
for (widget_list = free_list,
page_list = GTK_NOTEBOOK (dockbook)->children;
widget_list && page_list;
widget_list = g_list_next (widget_list),
page_list = g_list_next (page_list))
{
GtkNotebookPage *page;
page = (GtkNotebookPage *) page_list->data;
if ((GtkWidget *) widget_list->data == (GtkWidget *) dockable)
{
/* disconnect GtkNotebook's handler */
g_signal_handlers_disconnect_matched (menu_item,
G_SIGNAL_MATCH_DATA,
0, 0,
NULL, NULL, page);
/* and install our own */
g_signal_connect (menu_item, "activate",
G_CALLBACK (gimp_dockbook_menu_switch_page),
dockable);
break;
}
}
g_list_free (free_list);
}
gtk_widget_show (GTK_WIDGET (dockable));
dockable->dockbook = dockbook;
@ -526,10 +470,6 @@ gimp_dockbook_get_tab_widget (GimpDockbook *dockbook,
G_CALLBACK (gimp_dockbook_tab_drag_drop),
dockbook);
g_signal_connect (tab_widget, "button_press_event",
G_CALLBACK (gimp_dockbook_tab_button_press),
dockable);
return tab_widget;
}
@ -571,116 +511,6 @@ gimp_dockbook_drop_dockable (GimpDockbook *dockbook,
return FALSE;
}
static void
gimp_dockbook_menu_switch_page (GtkWidget *widget,
GimpDockable *dockable)
{
gint page_num = gtk_notebook_page_num (GTK_NOTEBOOK (dockable->dockbook),
GTK_WIDGET (dockable));
gtk_notebook_set_current_page (GTK_NOTEBOOK (dockable->dockbook), page_num);
}
static void
gimp_dockbook_menu_end (GimpDockbook *dockbook)
{
GtkWidget *notebook_menu;
notebook_menu = GTK_NOTEBOOK (dockbook)->menu;
g_object_ref (notebook_menu);
gtk_menu_detach (GTK_MENU (notebook_menu));
gtk_menu_attach_to_widget (GTK_MENU (notebook_menu),
GTK_WIDGET (dockbook),
gimp_dockbook_menu_detacher);
g_object_unref (notebook_menu);
/* release gimp_dockbook_tab_button_press()'s reference */
g_object_unref (dockbook);
}
static void
gimp_dockbook_menu_detacher (GtkWidget *widget,
GtkMenu *menu)
{
GtkNotebook *notebook;
g_return_if_fail (GTK_IS_NOTEBOOK (widget));
notebook = GTK_NOTEBOOK (widget);
g_return_if_fail (notebook->menu == (GtkWidget*) menu);
notebook->menu = NULL;
}
static gboolean
gimp_dockbook_tab_button_press (GtkWidget *widget,
GdkEventButton *bevent,
gpointer data)
{
GimpDockable *dockable;
GimpDockbook *dockbook;
gint page_num;
dockable = GIMP_DOCKABLE (data);
dockbook = dockable->dockbook;
page_num = gtk_notebook_page_num (GTK_NOTEBOOK (dockbook),
GTK_WIDGET (dockable));
gtk_notebook_set_current_page (GTK_NOTEBOOK (dockbook), page_num);
if (! GTK_WIDGET_HAS_FOCUS (dockbook))
gtk_widget_grab_focus (GTK_WIDGET (dockbook));
if (bevent->button == 3)
{
GtkWidget *add_widget;
gimp_item_factory_set_visible (GTK_ITEM_FACTORY (dockbook->item_factory),
"/dialog-menu", FALSE);
gimp_item_factory_set_visible (GTK_ITEM_FACTORY (dockbook->item_factory),
"/Select Tab", TRUE);
add_widget =
gtk_item_factory_get_widget (GTK_ITEM_FACTORY (dockbook->item_factory),
"/Select Tab");
/* do evil things */
{
GtkWidget *notebook_menu;
notebook_menu = GTK_NOTEBOOK (dockbook)->menu;
g_object_ref (notebook_menu);
gtk_menu_detach (GTK_MENU (notebook_menu));
GTK_NOTEBOOK (dockbook)->menu = notebook_menu;
gtk_menu_item_set_submenu (GTK_MENU_ITEM (add_widget), notebook_menu);
g_object_unref (notebook_menu);
}
/* an item factory callback may destroy the dockbook, so reference
* if for gimp_dockbook_menu_end()
*/
g_object_ref (dockbook);
gimp_item_factory_popup_with_data (dockbook->item_factory,
dockbook,
NULL, NULL,
(GtkDestroyNotify) gimp_dockbook_menu_end);
}
return TRUE;
}
static void
gimp_dockbook_tab_drag_begin (GtkWidget *widget,
GdkDragContext *context,

View file

@ -1,10 +1,14 @@
2003-10-19 Sven Neumann <sven@gimp.org>
* POTFILES.in: added new files.
2003-10-18 Danilo Šegan <dsegan@gmx.net>
* sr.po, sr@Latn.po: Updated Serbian translation.
2003-10-17 Pablo Gonzalo del Campo <pablodc@bigfoot.com>
* es.po: Updated Spanish translation.
* es.po: Updated Spanish translation.
2003-10-17 Dmitry G. Mastrukov <dmitry@taurussoft.org>

View file

@ -105,6 +105,7 @@ app/gui/file-open-menu.c
app/gui/file-save-dialog.c
app/gui/file-save-menu.c
app/gui/font-select.c
app/gui/fonts-menu.c
app/gui/gradient-editor-commands.c
app/gui/gradient-editor-menu.c
app/gui/gradient-select.c
@ -253,25 +254,27 @@ app/vectors/gimpvectors.c
app/vectors/gimpvectors-export.c
app/vectors/gimpvectors-import.c
app/widgets/widgets-enums.c
app/widgets/gimpbrusheditor.c
app/widgets/gimpbrushfactoryview.c
app/widgets/gimpbufferview.c
app/widgets/gimpchanneltreeview.c
app/widgets/gimpcoloreditor.c
app/widgets/gimpcolorframe.c
app/widgets/gimpcolormapeditor.c
app/widgets/gimpcontainergridview.c
app/widgets/gimpcontainerpopup.c
app/widgets/gimpdataeditor.c
app/widgets/gimpdatafactoryview.c
app/widgets/gimpdevicestatus.c
app/widgets/gimpdock.c
app/widgets/gimpdocumentview.c
app/widgets/gimpdnd.c
app/widgets/gimpdock.c
app/widgets/gimpdockable.c
app/widgets/gimpdocumentview.c
app/widgets/gimpdrawabletreeview.c
app/widgets/gimperrorconsole.c
app/widgets/gimpfontselection.c
app/widgets/gimpfontselection-dialog.c
app/widgets/gimpfontselection.c
app/widgets/gimpfontview.c
app/widgets/gimpgradienteditor.c
app/widgets/gimpgrideditor.c
app/widgets/gimphelp.c
@ -295,6 +298,7 @@ app/widgets/gimpundoeditor.c
app/widgets/gimpvectorstreeview.c
app/widgets/gimpwidgets-constructors.c
app/widgets/gimpwidgets-utils.c
app/widgets/widgets-enums.c
app/xcf/xcf-load.c
app/xcf/xcf-read.c