midori_web_view_finalize (GObject* object);
static void
-midori_web_view_set_property (GObject* object,
- guint prop_id,
+midori_web_view_set_property (GObject* object,
+ guint prop_id,
const GValue* value,
- GParamSpec* pspec);
+ GParamSpec* pspec);
static void
-midori_web_view_get_property (GObject* object,
- guint prop_id,
- GValue* value,
+midori_web_view_get_property (GObject* object,
+ guint prop_id,
+ GValue* value,
GParamSpec* pspec);
static void
{
signals[PROGRESS_STARTED] = g_signal_new (
"progress-started",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
(GSignalFlags)(G_SIGNAL_RUN_LAST),
G_STRUCT_OFFSET (MidoriWebViewClass, progress_started),
0,
signals[PROGRESS_CHANGED] = g_signal_new (
"progress-changed",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
(GSignalFlags)(G_SIGNAL_RUN_LAST),
G_STRUCT_OFFSET (MidoriWebViewClass, progress_changed),
0,
signals[PROGRESS_DONE] = g_signal_new (
"progress-done",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
(GSignalFlags)(G_SIGNAL_RUN_LAST),
G_STRUCT_OFFSET (MidoriWebViewClass, progress_done),
0,
signals[LOAD_DONE] = g_signal_new (
"load-done",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
(GSignalFlags)(G_SIGNAL_RUN_LAST),
G_STRUCT_OFFSET (MidoriWebViewClass, load_done),
0,
G_TYPE_NONE, 1,
WEBKIT_TYPE_WEB_FRAME);
- signals[ELEMENT_MOTION] = g_signal_new(
+ signals[ELEMENT_MOTION] = g_signal_new (
"element-motion",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
(GSignalFlags)(G_SIGNAL_RUN_LAST),
G_STRUCT_OFFSET (MidoriWebViewClass, element_motion),
0,
G_TYPE_NONE, 1,
G_TYPE_STRING);
- signals[CLOSE] = g_signal_new(
+ signals[CLOSE] = g_signal_new (
"close",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
(GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
G_STRUCT_OFFSET (MidoriWebViewClass, close),
0,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
- signals[NEW_TAB] = g_signal_new(
+ signals[NEW_TAB] = g_signal_new (
"new-tab",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
(GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
G_STRUCT_OFFSET (MidoriWebViewClass, new_tab),
0,
G_TYPE_NONE, 1,
G_TYPE_STRING);
- signals[NEW_WINDOW] = g_signal_new(
+ signals[NEW_WINDOW] = g_signal_new (
"new-window",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
(GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
G_STRUCT_OFFSET (MidoriWebViewClass, new_window),
0,
web_view->progress = 0;
uri = webkit_web_frame_get_uri (web_frame);
_midori_web_view_set_uri (web_view, uri);
- icon = midori_web_view_get_icon (web_view);
- katze_throbber_set_static_pixbuf (KATZE_THROBBER (web_view->tab_icon),
- icon);
- g_object_unref (icon);
+ if (web_view->tab_icon)
+ {
+ icon = midori_web_view_get_icon (web_view);
+ katze_throbber_set_static_pixbuf (KATZE_THROBBER (web_view->tab_icon),
+ icon);
+ g_object_unref (icon);
+ }
}
static void
{
GdkModifierType state;
GtkClipboard* clipboard;
+ gchar* uri;
if (event->button == 2 && web_view->middle_click_opens_selection)
{
clipboard = gtk_clipboard_get_for_display (
gtk_widget_get_display (GTK_WIDGET (web_view)),
GDK_SELECTION_PRIMARY);
- gchar* uri = gtk_clipboard_wait_for_text (clipboard);
+ uri = gtk_clipboard_wait_for_text (clipboard);
if (uri && strchr (uri, '.') && !strchr (uri, ' '))
{
if (state & GDK_CONTROL_MASK)
{
GdkModifierType state = (GdkModifierType)0;
gint x, y;
+
gdk_window_get_pointer (NULL, &x, &y, &state);
if (state & GDK_CONTROL_MASK)
{
g_signal_emit (web_view, signals[NEW_TAB], 0, uri);
}
+static void
+midori_web_view_menu_new_window_activate_cb (GtkWidget* widget,
+ MidoriWebView* web_view)
+{
+ const gchar* uri = g_object_get_data (G_OBJECT (widget), "uri");
+ g_signal_emit (web_view, signals[NEW_WINDOW], 0, uri);
+}
+
static void
webkit_web_view_populate_popup_cb (GtkWidget* web_view,
GtkWidget* menu)
{
- const gchar* uri = midori_web_view_get_link_uri (MIDORI_WEB_VIEW (web_view));
+ const gchar* uri;
+ GtkWidget* menuitem;
+ GdkScreen* screen;
+ GtkIconTheme* icon_theme;
+ GtkWidget* icon;
+ gchar* text;
+ GList* items;
+
+ uri = midori_web_view_get_link_uri (MIDORI_WEB_VIEW (web_view));
if (uri)
{
- GtkWidget* menuitem = gtk_image_menu_item_new_with_mnemonic (
+ menuitem = gtk_image_menu_item_new_with_mnemonic (
_("Open Link in New _Tab"));
- GdkScreen* screen = gtk_widget_get_screen (web_view);
- GtkIconTheme* icon_theme = gtk_icon_theme_get_for_screen (screen);
+ screen = gtk_widget_get_screen (web_view);
+ icon_theme = gtk_icon_theme_get_for_screen (screen);
if (gtk_icon_theme_has_icon (icon_theme, STOCK_TAB_NEW))
{
- GtkWidget* icon = gtk_image_new_from_stock (STOCK_TAB_NEW,
- GTK_ICON_SIZE_MENU);
+ icon = gtk_image_new_from_stock (STOCK_TAB_NEW, GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), icon);
}
gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 1);
g_signal_connect (menuitem, "activate",
G_CALLBACK (midori_web_view_menu_new_tab_activate_cb), web_view);
gtk_widget_show (menuitem);
+ /* hack to implement New Window */
+ items = gtk_container_get_children (GTK_CONTAINER (menu));
+ menuitem = (GtkWidget*)g_list_nth_data (items, 2);
+ g_object_set_data (G_OBJECT (menuitem), "uri", (gchar*)uri);
+ g_signal_connect (menuitem, "activate",
+ G_CALLBACK (midori_web_view_menu_new_window_activate_cb), web_view);
+ menuitem = (GtkWidget*)g_list_nth_data (items, 3);
+ /* hack to disable non-functional Download File */
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ g_list_free (items);
}
if (!uri && webkit_web_view_has_selection (WEBKIT_WEB_VIEW (web_view)))
{
- gchar* text = webkit_web_view_get_selected_text (
- WEBKIT_WEB_VIEW (web_view));
+ text = webkit_web_view_get_selected_text (WEBKIT_WEB_VIEW (web_view));
if (text && strchr (text, '.') && !strchr (text, ' '))
{
- GtkWidget* menuitem = gtk_image_menu_item_new_with_mnemonic (
+ menuitem = gtk_image_menu_item_new_with_mnemonic (
_("Open URL in New _Tab"));
- GtkWidget* icon = gtk_image_new_from_stock (GTK_STOCK_JUMP_TO,
- GTK_ICON_SIZE_MENU);
+ icon = gtk_image_new_from_stock (GTK_STOCK_JUMP_TO,
+ GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), icon);
gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, -1);
g_object_set_data (G_OBJECT (menuitem), "uri", text);
G_CALLBACK (midori_web_view_menu_new_tab_activate_cb), web_view);
gtk_widget_show (menuitem);
}
- /* FIXME: We are leaking 'text' which is not const but should be. */
+ /* text should be const, but it is allocated, so we must free it */
+ g_free (text);
}
}
* midori_web_view_get_proxy_tab_label:
* @web_view: a #MidoriWebView
*
- * Retrieves a proxy tab label that is typically used as the label of
- * a #GtkNotebook page.
+ * Retrieves a proxy tab label that is typically used as the label
+ * of a #GtkNotebook page.
*
- * The label is created on the first call and will be updated to reflect
- * changes to the icon and title automatically.
+ * The label is created on the first call and will be updated to
+ * reflect changes to the icon and title automatically.
*
- * The icon embedded in the label will reflect the loading status of the
- * web view.
+ * The icon embedded in the label will reflect the loading status
+ * of the web view.
*
* Note: This fails if a proxy tab icon has been created already.
*
* Retrieves an icon associated with the currently loaded URI. If no
* icon is available a default icon is used.
*
+ * The pixbuf is newly allocated and should be unreffed after use.
+ *
* Return value: a #GdkPixbuf
**/
GdkPixbuf*