aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog32
-rw-r--r--lib/ephy-gui.c32
-rw-r--r--lib/ephy-gui.h2
-rw-r--r--lib/ephy-marshal.list1
-rw-r--r--src/Makefile.am2
-rw-r--r--src/bookmarks/Makefile.am6
-rw-r--r--src/bookmarks/ephy-bookmark-action.c32
-rw-r--r--src/bookmarks/ephy-bookmark-action.h6
-rw-r--r--src/bookmarks/ephy-bookmarks-menu.c6
-rw-r--r--src/bookmarks/ephy-bookmarksbar.c56
-rw-r--r--src/bookmarks/ephy-favorites-menu.c (renamed from src/ephy-favorites-menu.c)6
-rw-r--r--src/bookmarks/ephy-favorites-menu.h (renamed from src/ephy-favorites-menu.h)0
-rw-r--r--src/bookmarks/ephy-topic-action.c37
-rw-r--r--src/bookmarks/ephy-topic-action.h9
14 files changed, 163 insertions, 64 deletions
diff --git a/ChangeLog b/ChangeLog
index 2e877b907..1af2bda98 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,35 @@
+2004-07-02 Marco Pesenti Gritti <marco@gnome.org>
+
+ * src/bookmarks/ephy-favorites-menu.c:
+ * src/bookmarks/ephy-favorites-menu.h:
+
+ Move in the bookmarks dir.
+
+ * lib/ephy-gui.c: (ephy_gui_select_row_by_key),
+ (ephy_gui_is_middle_click):
+ * lib/ephy-gui.h:
+
+ Add a function to check if menus was activated
+ by a middle or a ctrl+click (which is equivalent in epiphany)
+
+ * lib/ephy-marshal.list:
+ * src/Makefile.am:
+ * src/bookmarks/Makefile.am:
+ * src/bookmarks/ephy-bookmark-action.c: (activate_cb),
+ (ephy_bookmark_action_class_init):
+ * src/bookmarks/ephy-bookmark-action.h:
+ * src/bookmarks/ephy-bookmarks-menu.c: (open_bookmark_cb),
+ (create_menu):
+ * src/bookmarks/ephy-bookmarksbar.c: (bookmark_open_in_tab_cb),
+ (bookmark_open_cb), (ephy_bookmarksbar_action_request):
+ * src/bookmarks/ephy-topic-action.c: (menu_activate_cb),
+ (ephy_topic_action_class_init):
+ * src/bookmarks/ephy-topic-action.h:
+
+ Add signals to open bookmarks in new window/tab. I'll need
+ them for context menus.
+ Use them for middle/ctrl click.
+
2004-07-01 Christian Persch <chpe@cvs.gnome.org>
* src/ephy-window.c:
diff --git a/lib/ephy-gui.c b/lib/ephy-gui.c
index 09ef4ef4a..88460dc78 100644
--- a/lib/ephy-gui.c
+++ b/lib/ephy-gui.c
@@ -35,6 +35,7 @@
#include <gtk/gtkimage.h>
#include <gtk/gtklabel.h>
#include <gtk/gtkstock.h>
+#include <gtk/gtkmain.h>
/* Styles for tab labels */
GtkStyle *loading_text_style = NULL;
@@ -214,3 +215,34 @@ ephy_gui_select_row_by_key (GtkTreeView *treeview, gint column, guint32 unicode)
return TRUE;
}
+
+gboolean
+ephy_gui_is_middle_click (void)
+{
+ gboolean new_tab = FALSE;
+ GdkEvent *event;
+
+ event = gtk_get_current_event ();
+ if (event != NULL)
+ {
+ if (event->type == GDK_BUTTON_RELEASE)
+ {
+ guint modifiers, button, state;
+
+ modifiers = gtk_accelerator_get_default_mod_mask ();
+ button = event->button.button;
+ state = event->button.state;
+
+ /* middle-click or control-click */
+ if ((button == 1 && ((state & modifiers) == GDK_CONTROL_MASK)) ||
+ (button == 2))
+ {
+ new_tab = TRUE;
+ }
+ }
+
+ gdk_event_free (event);
+ }
+
+ return new_tab;
+}
diff --git a/lib/ephy-gui.h b/lib/ephy-gui.h
index 685b70613..8c3846d10 100644
--- a/lib/ephy-gui.h
+++ b/lib/ephy-gui.h
@@ -36,6 +36,8 @@ void ephy_gui_menu_position_under_widget (GtkMenu *menu,
gboolean *push_in,
gpointer user_data);
+gboolean ephy_gui_is_middle_click (void);
+
gboolean ephy_gui_select_row_by_key (GtkTreeView *treeview,
gint column,
guint32 unicode);
diff --git a/lib/ephy-marshal.list b/lib/ephy-marshal.list
index cf7a58c32..425418825 100644
--- a/lib/ephy-marshal.list
+++ b/lib/ephy-marshal.list
@@ -7,3 +7,4 @@ VOID:POINTER,POINTER
VOID:STRING,INT
VOID:STRING,INT,INT
VOID:STRING,STRING
+VOID:STRING,BOOLEAN
diff --git a/src/Makefile.am b/src/Makefile.am
index 3c765c7cc..7688254a0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -48,7 +48,6 @@ NOINST_H_FILES = \
ephy-encoding-menu.h \
ephy-extensions-manager.h \
ephy-favicon-action.h \
- ephy-favorites-menu.h \
ephy-go-action.h \
ephy-history-window.h \
ephy-location-action.h \
@@ -81,7 +80,6 @@ libephymain_la_SOURCES = \
ephy-extension.c \
ephy-extensions-manager.c \
ephy-favicon-action.c \
- ephy-favorites-menu.c \
ephy-go-action.c \
ephy-history-window.c \
ephy-location-action.c \
diff --git a/src/bookmarks/Makefile.am b/src/bookmarks/Makefile.am
index 3b2b130ae..9f26dd2b4 100644
--- a/src/bookmarks/Makefile.am
+++ b/src/bookmarks/Makefile.am
@@ -30,8 +30,9 @@ NOINST_H_FILES = \
ephy-bookmarks-import.h \
ephy-bookmarks-menu.h \
ephy-bookmarksbar-model.h \
- ephy-bookmarksbar.h \
+ ephy-bookmarksbar.h \
ephy-bookmark-properties.h \
+ ephy-favorites-menu.h \
ephy-new-bookmark.h \
ephy-topic-action.h \
ephy-topics-selector.h
@@ -44,8 +45,9 @@ libephybookmarks_la_SOURCES = \
ephy-bookmarks-import.c \
ephy-bookmarks-menu.c \
ephy-bookmarksbar-model.c \
- ephy-bookmarksbar.c \
+ ephy-bookmarksbar.c \
ephy-bookmark-properties.c \
+ ephy-favorites-menu.c \
ephy-new-bookmark.c \
ephy-topic-action.c \
ephy-topics-selector.c \
diff --git a/src/bookmarks/ephy-bookmark-action.c b/src/bookmarks/ephy-bookmark-action.c
index 21b094bae..2b44f1a5a 100644
--- a/src/bookmarks/ephy-bookmark-action.c
+++ b/src/bookmarks/ephy-bookmark-action.c
@@ -27,6 +27,7 @@
#include <gtk/gtktoolitem.h>
#include "ephy-bookmark-action.h"
+#include "ephy-marshal.h"
#include "ephy-dnd.h"
#include "ephy-bookmarksbar.h"
#include "ephy-bookmarks.h"
@@ -34,6 +35,7 @@
#include "ephy-shell.h"
#include "ephy-string.h"
#include "ephy-debug.h"
+#include "ephy-gui.h"
#include <string.h>
@@ -75,7 +77,8 @@ enum
enum
{
- GO_LOCATION,
+ OPEN,
+ OPEN_IN_TAB,
LAST_SIGNAL
};
@@ -342,7 +345,14 @@ activate_cb (GtkWidget *widget, GtkAction *action)
}
}
- g_signal_emit (action, signals[GO_LOCATION], 0, location);
+ if (ephy_gui_is_middle_click ())
+ {
+ g_signal_emit (action, signals[OPEN_IN_TAB], 0, location, FALSE);
+ }
+ else
+ {
+ g_signal_emit (action, signals[OPEN], 0, location);
+ }
g_free (location);
g_free (text);
@@ -580,17 +590,29 @@ ephy_bookmark_action_class_init (EphyBookmarkActionClass *class)
object_class->set_property = ephy_bookmark_action_set_property;
object_class->get_property = ephy_bookmark_action_get_property;
- signals[GO_LOCATION] =
- g_signal_new ("go_location",
+ signals[OPEN] =
+ g_signal_new ("open",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EphyBookmarkActionClass, go_location),
+ G_STRUCT_OFFSET (EphyBookmarkActionClass, open),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
1,
G_TYPE_STRING);
+ signals[OPEN_IN_TAB] =
+ g_signal_new ("open_in_tab",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (EphyBookmarkActionClass, open_in_tab),
+ NULL, NULL,
+ ephy_marshal_VOID__STRING_BOOLEAN,
+ G_TYPE_NONE,
+ 2,
+ G_TYPE_STRING,
+ G_TYPE_BOOLEAN);
+
g_object_class_install_property (object_class,
PROP_BOOKMARK_ID,
g_param_spec_int ("bookmark_id",
diff --git a/src/bookmarks/ephy-bookmark-action.h b/src/bookmarks/ephy-bookmark-action.h
index 1762ed315..8a4cd9e61 100644
--- a/src/bookmarks/ephy-bookmark-action.h
+++ b/src/bookmarks/ephy-bookmark-action.h
@@ -47,7 +47,11 @@ struct _EphyBookmarkActionClass
{
GtkActionClass parent_class;
- void (*go_location) (EphyBookmarkAction *action, char *location);
+ void (*open) (EphyBookmarkAction *action,
+ char *address);
+ void (*open_in_tab) (EphyBookmarkAction *action,
+ char *address,
+ gboolean new_window);
};
GType ephy_bookmark_action_get_type (void);
diff --git a/src/bookmarks/ephy-bookmarks-menu.c b/src/bookmarks/ephy-bookmarks-menu.c
index 601027aa2..77427c4d2 100644
--- a/src/bookmarks/ephy-bookmarks-menu.c
+++ b/src/bookmarks/ephy-bookmarks-menu.c
@@ -111,7 +111,7 @@ ephy_bookmarks_menu_clean (EphyBookmarksMenu *menu)
}
static void
-go_location_cb (GtkAction *action, char *location, EphyWindow *window)
+open_bookmark_cb (GtkAction *action, char *location, EphyWindow *window)
{
ephy_window_load_url (window, location);
}
@@ -219,8 +219,8 @@ create_menu (EphyBookmarksMenu *menu, EphyNode *node, const char *path)
gtk_action_set_accel_path (action, accel_path);
gtk_action_group_add_action (p->action_group, action);
g_object_unref (action);
- g_signal_connect (action, "go_location",
- G_CALLBACK (go_location_cb), p->window);
+ g_signal_connect (action, "open",
+ G_CALLBACK (open_bookmark_cb), p->window);
gtk_ui_manager_add_ui (p->merge, p->ui_id, path,
name, verb,
diff --git a/src/bookmarks/ephy-bookmarksbar.c b/src/bookmarks/ephy-bookmarksbar.c
index 3945ff1dd..3d3bfd72e 100644
--- a/src/bookmarks/ephy-bookmarksbar.c
+++ b/src/bookmarks/ephy-bookmarksbar.c
@@ -123,48 +123,24 @@ open_in_tabs_cb (GtkAction *action, GList *uri_list, EphyBookmarksBar *toolbar)
}
static void
-go_location_cb (GtkAction *action, char *location, EphyBookmarksBar *toolbar)
+bookmark_open_in_tab_cb (GtkAction *action, char *location,
+ gboolean new_window, EphyBookmarksBar *toolbar)
{
- EphyWindow *window = toolbar->priv->window;
- GdkEvent *event;
- gboolean new_tab = FALSE;
+ EphyNewTabFlags flags = EPHY_NEW_TAB_OPEN_PAGE;
- g_return_if_fail (window != NULL);
-
- event = gtk_get_current_event ();
- if (event != NULL)
+ if (!new_window)
{
- if (event->type == GDK_BUTTON_RELEASE)
- {
- guint modifiers, button, state;
-
- modifiers = gtk_accelerator_get_default_mod_mask ();
- button = event->button.button;
- state = event->button.state;
-
- /* middle-click or control-click */
- if ((button == 1 && ((state & modifiers) == GDK_CONTROL_MASK)) ||
- (button == 2))
- {
- new_tab = TRUE;
- }
- }
-
- gdk_event_free (event);
+ flags |= EPHY_NEW_TAB_IN_EXISTING_WINDOW;
}
- if (new_tab)
- {
- ephy_shell_new_tab (ephy_shell, window,
- ephy_window_get_active_tab (window),
- location,
- EPHY_NEW_TAB_OPEN_PAGE |
- EPHY_NEW_TAB_IN_EXISTING_WINDOW);
- }
- else
- {
- ephy_window_load_url (window, location);
- }
+ ephy_shell_new_tab (ephy_shell, toolbar->priv->window, NULL,
+ location, flags);
+}
+
+static void
+bookmark_open_cb (GtkAction *action, char *location, EphyBookmarksBar *toolbar)
+{
+ ephy_window_load_url (toolbar->priv->window, location);
}
static gboolean
@@ -267,8 +243,10 @@ ephy_bookmarksbar_action_request (EggEditableToolbar *eggtoolbar,
g_return_if_fail (action != NULL);
- g_signal_connect (action, "go_location",
- G_CALLBACK (go_location_cb), toolbar);
+ g_signal_connect (action, "open",
+ G_CALLBACK (bookmark_open_cb), toolbar);
+ g_signal_connect (action, "open_in_tab",
+ G_CALLBACK (bookmark_open_in_tab_cb), toolbar);
gtk_action_group_add_action (toolbar->priv->action_group, action);
g_object_unref (action);
diff --git a/src/ephy-favorites-menu.c b/src/bookmarks/ephy-favorites-menu.c
index fee325c47..f2ef1e814 100644
--- a/src/ephy-favorites-menu.c
+++ b/src/bookmarks/ephy-favorites-menu.c
@@ -102,7 +102,7 @@ ephy_favorites_menu_clean (EphyFavoritesMenu *menu)
}
static void
-go_location_cb (GtkAction *action, char *location, EphyWindow *window)
+open_bookmark_cb (GtkAction *action, char *location, EphyWindow *window)
{
ephy_window_load_url (window, location);
}
@@ -149,8 +149,8 @@ ephy_favorites_menu_rebuild (EphyFavoritesMenu *menu)
gtk_action_set_accel_path (action, accel_path);
gtk_action_group_add_action (p->action_group, action);
g_object_unref (action);
- g_signal_connect (action, "go_location",
- G_CALLBACK (go_location_cb), p->window);
+ g_signal_connect (action, "open",
+ G_CALLBACK (open_bookmark_cb), p->window);
gtk_ui_manager_add_ui (merge, p->ui_id,
"/menubar/GoMenu",
diff --git a/src/ephy-favorites-menu.h b/src/bookmarks/ephy-favorites-menu.h
index 48c6fbd27..48c6fbd27 100644
--- a/src/ephy-favorites-menu.h
+++ b/src/bookmarks/ephy-favorites-menu.h
diff --git a/src/bookmarks/ephy-topic-action.c b/src/bookmarks/ephy-topic-action.c
index 2f0ac30f9..76503124a 100644
--- a/src/bookmarks/ephy-topic-action.c
+++ b/src/bookmarks/ephy-topic-action.c
@@ -34,6 +34,7 @@
#include "ephy-debug.h"
#include "ephy-gui.h"
#include "ephy-string.h"
+#include "ephy-marshal.h"
static void ephy_topic_action_init (EphyTopicAction *action);
static void ephy_topic_action_class_init (EphyTopicActionClass *class);
@@ -54,7 +55,8 @@ enum
enum
{
- GO_LOCATION,
+ OPEN,
+ OPEN_IN_TAB,
OPEN_IN_TABS,
LAST_SIGNAL
};
@@ -143,8 +145,17 @@ menu_activate_cb (GtkWidget *item, GtkAction *action)
node = g_object_get_data (G_OBJECT (item), "node");
location = ephy_node_get_property_string
(node, EPHY_NODE_BMK_PROP_LOCATION);
- g_signal_emit (action, ephy_topic_action_signals[GO_LOCATION],
- 0, location);
+
+ if (ephy_gui_is_middle_click ())
+ {
+ g_signal_emit (action, ephy_topic_action_signals[OPEN_IN_TAB],
+ 0, location, FALSE);
+ }
+ else
+ {
+ g_signal_emit (action, ephy_topic_action_signals[OPEN],
+ 0, location);
+ }
}
static void
@@ -609,22 +620,34 @@ ephy_topic_action_class_init (EphyTopicActionClass *class)
object_class->set_property = ephy_topic_action_set_property;
object_class->get_property = ephy_topic_action_get_property;
- ephy_topic_action_signals[GO_LOCATION] =
- g_signal_new ("go_location",
+ ephy_topic_action_signals[OPEN] =
+ g_signal_new ("open",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EphyTopicActionClass, go_location),
+ G_STRUCT_OFFSET (EphyTopicActionClass, open),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
1,
G_TYPE_STRING);
+ ephy_topic_action_signals[OPEN_IN_TAB] =
+ g_signal_new ("open_in_tab",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (EphyTopicActionClass, open_in_tab),
+ NULL, NULL,
+ ephy_marshal_VOID__STRING_BOOLEAN,
+ G_TYPE_NONE,
+ 2,
+ G_TYPE_STRING,
+ G_TYPE_BOOLEAN);
+
ephy_topic_action_signals[OPEN_IN_TABS] =
g_signal_new ("open_in_tabs",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EphyTopicActionClass, go_location),
+ G_STRUCT_OFFSET (EphyTopicActionClass, open_in_tabs),
NULL, NULL,
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE,
diff --git a/src/bookmarks/ephy-topic-action.h b/src/bookmarks/ephy-topic-action.h
index 6a74d1238..fa04e2d06 100644
--- a/src/bookmarks/ephy-topic-action.h
+++ b/src/bookmarks/ephy-topic-action.h
@@ -47,8 +47,13 @@ struct _EphyTopicActionClass
{
GtkActionClass parent_class;
- void (*go_location) (EphyTopicAction *action, char *location);
- void (*open_in_tabs) (EphyTopicAction *action, GList *uri_list);
+ void (*open) (EphyTopicAction *action,
+ char *address);
+ void (*open_in_tab) (EphyTopicAction *action,
+ char *address,
+ gboolean new_window);
+ void (*open_in_tabs) (EphyTopicAction *action,
+ GList *uri_list);
};
GType ephy_topic_action_get_type (void);