[PATCHES] bookmark accelerators, smartbookmark activation
Juho Snellman <[email protected]> Thu, 15 Jan 2004 04:16:32 +0200
| Newsgroups | gmane.comp.web.galeon.devel |
|---|---|
| Message-ID | <[email protected]> |
Attached is a patch that adds keyboard accelerators for bookmarks. The accelerator information is already present in the bookmark information, and correctly imported from Galeon1 bookmarks. No mechanism for adding/editing accelerators is provided, though. In Galeon1 editing of the accelerators could be done simply by using the normal accelerator editing in gtk menus. Enabling this for the dynamically created bookmark menuitems (using GtkAccelMap) doesn't seem to work. I assume that doing this for the egg-menus requires some additional trickery. Also attached is a one-liner that slightly changes the behaviour of the "enter the arguments for this smart site"-dialog. Currently the dialog is always shown when a smart bookmark with an empty "location" field is activated. The patch changes this behaviour, so that the dialog isn't shown if we already got the argument (for example the user typed some text into the bookmark's entrybox in the bookmark toolbar). -- Juho Snellman
galeon-accel.patch
(text/plain, 8.4 KB)
Index: bookmarks/bookmarks-folder-tb-widget.c
===================================================================
RCS file: /cvs/gnome/galeon/bookmarks/bookmarks-folder-tb-widget.c,v
retrieving revision 1.17
diff -u -r1.17 bookmarks-folder-tb-widget.c
--- bookmarks/bookmarks-folder-tb-widget.c 4 Aug 2003 20:26:33 -0000 1.17
+++ bookmarks/bookmarks-folder-tb-widget.c 10 Jan 2004 03:38:08 -0000
@@ -168,7 +168,7 @@
{
GbLocationSource *src = gb_tb_widget_get_location_source (GB_TB_WIDGET (w));
p->menu = gtk_menu_new ();
- p->ggm = gb_gtk_menu_new (folder, GTK_MENU_SHELL (p->menu));
+ p->ggm = gb_gtk_menu_new (folder, GTK_MENU_SHELL (p->menu), NULL);
gb_gtk_menu_set_location_source (p->ggm, src);
g_signal_connect (p->menu, "hide",
G_CALLBACK (gb_folder_tb_widget_menu_hide_cb), w);
Index: bookmarks/bookmarks-gtk-menu-item.c
===================================================================
RCS file: /cvs/gnome/galeon/bookmarks/bookmarks-gtk-menu-item.c,v
retrieving revision 1.9
diff -u -r1.9 bookmarks-gtk-menu-item.c
--- bookmarks/bookmarks-gtk-menu-item.c 24 Oct 2003 20:38:15 -0000 1.9
+++ bookmarks/bookmarks-gtk-menu-item.c 10 Jan 2004 03:38:08 -0000
@@ -41,6 +42,7 @@
struct _GbGtkMenuItemPrivate {
GbBookmark *bookmark;
GbGtkMenu *submenu;
+ GtkAccelGroup *accel_group;
guint rebuild_timeout;
GbLocationSource *location_source;
@@ -127,20 +129,24 @@
}
g_object_unref (G_OBJECT (p->bookmark));
+ g_object_unref (G_OBJECT (p->accel_group));
g_free (p);
G_OBJECT_CLASS (gtk_image_menu_item_class)->finalize (o);
}
GbGtkMenuItem *
-gb_gtk_menu_item_new (GbBookmark *bookmark)
+gb_gtk_menu_item_new (GbBookmark *bookmark, GtkAccelGroup *accel_group)
{
GbGtkMenuItem *ret = g_object_new (GB_TYPE_GTK_MENU_ITEM, NULL);
GbGtkMenuItemPrivate *p = ret->priv;
p->bookmark = bookmark;
g_object_ref (bookmark);
+ p->accel_group = accel_group;
+ g_object_ref (G_OBJECT(accel_group));
+
g_signal_connect (bookmark, "modified",
G_CALLBACK (gb_gtk_menu_item_modied_cb), ret);
g_signal_connect (ret, "activate",
@@ -152,6 +182,16 @@
G_CALLBACK (gb_gtk_menu_item_button_press_cb), NULL);
gb_bookmark_dnd_drag_source_set (GTK_WIDGET(ret), bookmark);
+
+ if (GB_SITE(bookmark)->accel_key > 0) {
+ gtk_widget_add_accelerator (GTK_WIDGET (ret),
+ "activate",
+ accel_group,
+ GB_SITE(bookmark)->accel_key,
+ GB_SITE(bookmark)->accel_mods,
+ GTK_ACCEL_VISIBLE);
+
+ }
}
gb_gtk_menu_item_rebuild (ret);
@@ -216,7 +269,7 @@
g_return_if_fail (GTK_IS_MENU_SHELL (menu));
- p->submenu = gb_gtk_menu_new (GB_FOLDER (p->bookmark), GTK_MENU_SHELL (menu));
+ p->submenu = gb_gtk_menu_new (GB_FOLDER (p->bookmark), GTK_MENU_SHELL (menu), p->accel_group);
gb_gtk_menu_set_location_source (p->submenu, p->location_source);
g_signal_connect (p->submenu, "bookmark-activated",
Index: bookmarks/bookmarks-gtk-menu-item.h
===================================================================
RCS file: /cvs/gnome/galeon/bookmarks/bookmarks-gtk-menu-item.h,v
retrieving revision 1.2
diff -u -r1.2 bookmarks-gtk-menu-item.h
--- bookmarks/bookmarks-gtk-menu-item.h 1 Jan 2003 21:48:27 -0000 1.2
+++ bookmarks/bookmarks-gtk-menu-item.h 10 Jan 2004 03:38:09 -0000
@@ -66,7 +66,7 @@
};
GType gb_gtk_menu_item_get_type (void);
-GbGtkMenuItem * gb_gtk_menu_item_new (GbBookmark *bookmark);
+GbGtkMenuItem * gb_gtk_menu_item_new (GbBookmark *bookmark, GtkAccelGroup *accel_group);
void gb_gtk_menu_item_set_location_source (GbGtkMenuItem *gm, GbLocationSource *src);
void gb_gtk_menu_item_fill_submenu (GbGtkMenuItem *bmi, gboolean children);
Index: bookmarks/bookmarks-gtk-menu.c
===================================================================
RCS file: /cvs/gnome/galeon/bookmarks/bookmarks-gtk-menu.c,v
retrieving revision 1.20
diff -u -r1.20 bookmarks-gtk-menu.c
--- bookmarks/bookmarks-gtk-menu.c 18 Dec 2003 23:42:19 -0000 1.20
+++ bookmarks/bookmarks-gtk-menu.c 10 Jan 2004 03:38:09 -0000
@@ -42,6 +42,7 @@
struct _GbGtkMenuPrivate {
GbFolder *root;
GtkMenuShell *ms;
+ GtkAccelGroup *accel_group;
guint rebuild_timeout;
gboolean context_only;
@@ -141,6 +142,7 @@
g_slist_free (p->menuitems);
g_object_unref (G_OBJECT (p->root));
+ g_object_unref (G_OBJECT (p->accel_group));
g_object_unref (G_OBJECT (p->ms));
g_free (p);
@@ -148,7 +150,7 @@
}
static GbGtkMenu *
-gb_gtk_menu_new_internal (GbFolder *root, GtkMenuShell *ms, gboolean context_only)
+gb_gtk_menu_new_internal (GbFolder *root, GtkMenuShell *ms, gboolean context_only, GtkAccelGroup *accel_group)
{
GbGtkMenu *ret = g_object_new (GB_TYPE_GTK_MENU, NULL);
GbGtkMenuPrivate *p = ret->priv;
@@ -176,23 +178,26 @@
p->ms = ms;
g_object_ref (G_OBJECT (ms));
+ p->accel_group = accel_group;
+ g_object_ref (G_OBJECT (accel_group));
+
p->menuitems = NULL;
gb_gtk_menu_rebuild (ret);
return ret;
}
GbGtkMenu *
-gb_gtk_menu_new (GbFolder *root, GtkMenuShell *ms)
-{
- GbGtkMenu *ret = gb_gtk_menu_new_internal (root, ms, FALSE);
+gb_gtk_menu_new (GbFolder *root, GtkMenuShell *ms, GtkAccelGroup *accel_group)
+{
+ GbGtkMenu *ret = gb_gtk_menu_new_internal (root, ms, FALSE, accel_group);
return ret;
}
GbGtkMenu *
gb_gtk_menu_new_context_only (GbBookmarkSet *set, GtkMenuShell *ms)
{
- GbGtkMenu *ret = gb_gtk_menu_new_internal (set->root, ms, TRUE);
+ GbGtkMenu *ret = gb_gtk_menu_new_internal (set->root, ms, TRUE, NULL);
return ret;
}
@@ -249,7 +254,7 @@
GbGtkMenuPrivate *p = gm->priv;
GbGtkMenuItem *w;
- w = gb_gtk_menu_item_new (item);
+ w = gb_gtk_menu_item_new (item, p->accel_group);
gb_gtk_menu_item_set_location_source (w, p->location_source);
g_signal_connect (w, "bookmark-activated",
G_CALLBACK (gb_gtk_menu_bookmark_activated_cb), gm);
Index: bookmarks/bookmarks-gtk-menu.h
===================================================================
RCS file: /cvs/gnome/galeon/bookmarks/bookmarks-gtk-menu.h,v
retrieving revision 1.8
diff -u -r1.8 bookmarks-gtk-menu.h
--- bookmarks/bookmarks-gtk-menu.h 18 Dec 2003 23:42:19 -0000 1.8
+++ bookmarks/bookmarks-gtk-menu.h 10 Jan 2004 03:38:10 -0000
@@ -65,7 +65,7 @@
};
GType gb_gtk_menu_get_type (void);
-GbGtkMenu * gb_gtk_menu_new (GbFolder *root, GtkMenuShell *ms);
+GbGtkMenu * gb_gtk_menu_new (GbFolder *root, GtkMenuShell *ms, GtkAccelGroup *accel_group);
GbGtkMenu * gb_gtk_menu_new_context_only (GbBookmarkSet *set, GtkMenuShell *ms);
void gb_gtk_menu_set_location_source (GbGtkMenu *gm, GbLocationSource *src);
void gb_gtk_menu_fill_children_submenus (GbGtkMenu *gm);
Index: bookmarks/bookmarks-gtk-toolbar.c
===================================================================
RCS file: /cvs/gnome/galeon/bookmarks/bookmarks-gtk-toolbar.c,v
retrieving revision 1.2
diff -u -r1.2 bookmarks-gtk-toolbar.c
--- bookmarks/bookmarks-gtk-toolbar.c 18 Dec 2003 23:42:19 -0000 1.2
+++ bookmarks/bookmarks-gtk-toolbar.c 10 Jan 2004 03:38:10 -0000
@@ -248,7 +248,7 @@
GbGtkToolbarPrivate *p = gtb->priv;
GbTbWidget *tbw = GB_TB_WIDGET (GTK_BIN (item)->child);
GbBookmark *b = gb_tb_widget_get_bookmark (tbw);
- GbGtkMenuItem *proxy = gb_gtk_menu_item_new (b);
+ GbGtkMenuItem *proxy = gb_gtk_menu_item_new (b, NULL);
gb_gtk_menu_item_set_location_source (proxy, p->location_source);
g_signal_connect (proxy, "bookmark-activated",
G_CALLBACK (gb_gtk_toolbar_bookmark_activated_cb), gtb);
Index: src/galeon-window.c
===================================================================
RCS file: /cvs/gnome/galeon/src/galeon-window.c,v
retrieving revision 1.222
diff -u -r1.222 galeon-window.c
--- src/galeon-window.c 9 Jan 2004 03:26:00 -0000 1.222
+++ src/galeon-window.c 10 Jan 2004 03:38:20 -0000
@@ -856,8 +857,9 @@
menu_item = egg_menu_merge_get_widget(window->merge,
"/menu/Bookmarks");
menu_shell = gtk_menu_item_get_submenu (GTK_MENU_ITEM (menu_item));
- p->bookmarks_menu = gb_gtk_menu_new (bs->root, GTK_MENU_SHELL(menu_shell));
+ p->bookmarks_menu = gb_gtk_menu_new (bs->root, GTK_MENU_SHELL(menu_shell),
+ window->merge->accel_group);
gb_gtk_menu_set_location_source (p->bookmarks_menu, GB_LOCATION_SOURCE (window));
gb_gtk_menu_fill_children_submenus (p->bookmarks_menu);
galeon-smartbkmk.patch
(text/plain, 477 B)
diff -u -r1.222 galeon-window.c
--- src/galeon-window.c 9 Jan 2004 03:26:00 -0000 1.222
+++ src/galeon-window.c 10 Jan 2004 03:38:20 -0000
@@ -2657,11 +2659,12 @@
return;
}
if (GB_IS_SMART_SITE (b)
&& GB_SMART_SITE (b)->smarturl != NULL
&& (GB_SITE (b)->url == NULL
- || GB_SITE (b)->url[0]=='\0'))
+ || GB_SITE (b)->url[0]=='\0')
+ && ev->url[0] == '\0')
{
smarted_url = handle_smartsite (w, GB_SMART_SITE (b));
if (smarted_url == NULL)
{