aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ephy-encoding-menu.c34
-rw-r--r--src/ephy-notebook.c251
-rw-r--r--src/ephy-notebook.h3
-rw-r--r--src/ephy-tabs-menu.c1
-rw-r--r--src/ephy-window.c51
-rw-r--r--src/ephy-window.h4
-rwxr-xr-xsrc/ppview-toolbar.c4
-rw-r--r--src/window-commands.c22
8 files changed, 216 insertions, 154 deletions
diff --git a/src/ephy-encoding-menu.c b/src/ephy-encoding-menu.c
index 58dd153a1..a664d5838 100644
--- a/src/ephy-encoding-menu.c
+++ b/src/ephy-encoding-menu.c
@@ -21,7 +21,6 @@
#endif
#include "ephy-encoding-menu.h"
-#include "ephy-gobject-misc.h"
#include "ephy-string.h"
#include "egg-menu-merge.h"
#include "ephy-shell.h"
@@ -64,14 +63,33 @@ enum
static gpointer g_object_class;
-/**
- * EphyEncodingMenu object
- */
-MAKE_GET_TYPE (ephy_encoding_menu,
- "EphyEncodingMenu", EphyEncodingMenu,
- ephy_encoding_menu_class_init, ephy_encoding_menu_init,
- G_TYPE_OBJECT);
+GType
+ephy_encoding_menu_get_type (void)
+{
+ static GType ephy_encoding_menu_type = 0;
+ if (ephy_encoding_menu_type == 0)
+ {
+ static const GTypeInfo our_info =
+ {
+ sizeof (EphyEncodingMenuClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) ephy_encoding_menu_class_init,
+ NULL,
+ NULL,
+ sizeof (EphyEncodingMenu),
+ 0,
+ (GInstanceInitFunc) ephy_encoding_menu_init
+ };
+
+ ephy_encoding_menu_type = g_type_register_static (G_TYPE_OBJECT,
+ "EphyEncodingMenu",
+ &our_info, 0);
+ }
+
+ return ephy_encoding_menu_type;
+}
static void
ephy_encoding_menu_class_init (EphyEncodingMenuClass *klass)
{
diff --git a/src/ephy-notebook.c b/src/ephy-notebook.c
index 6671ee3b3..46dda88ea 100644
--- a/src/ephy-notebook.c
+++ b/src/ephy-notebook.c
@@ -45,21 +45,22 @@ struct EphyNotebookPrivate
{
GList *focused_pages;
GList *opened_tabs;
-
GtkTooltips *title_tips;
-
- /* Used during tab drag'n'drop */
+ guint tabs_vis_notifier_id;
gulong motion_notify_handler_id;
gint x_start, y_start;
gboolean drag_in_progress;
+ gboolean show_tabs;
EphyNotebook *src_notebook;
gint src_page;
};
-/* GObject boilerplate code */
-static void ephy_notebook_init (EphyNotebook *notebook);
-static void ephy_notebook_class_init (EphyNotebookClass *klass);
-static void ephy_notebook_finalize (GObject *object);
+static void ephy_notebook_init (EphyNotebook *notebook);
+static void ephy_notebook_class_init (EphyNotebookClass *klass);
+static void ephy_notebook_finalize (GObject *object);
+static void move_tab_to_another_notebook (EphyNotebook *src,
+ EphyNotebook *dest,
+ gint dest_page);
/* Local variables */
static GdkCursor *cursor = NULL;
@@ -72,17 +73,6 @@ static GtkTargetEntry url_drag_types [] =
};
static guint n_url_drag_types = G_N_ELEMENTS (url_drag_types);
-/* Local functions */
-static void drag_start (EphyNotebook *notebook,
- EphyNotebook *src_notebook,
- gint src_page);
-static void drag_stop (EphyNotebook *notebook);
-
-static gboolean motion_notify_cb (EphyNotebook *notebook,
- GdkEventMotion *event,
- gpointer data);
-
-/* Signals */
enum
{
TAB_ADDED,
@@ -361,64 +351,6 @@ ephy_notebook_move_page (EphyNotebook *src, EphyNotebook *dest,
}
static void
-move_tab_to_another_notebook(EphyNotebook *src,
- EphyNotebook *dest, gint dest_page)
-{
- GtkWidget *child;
- gint cur_page;
-
- /* This is getting tricky, the tab was dragged in a notebook
- * in another window of the same app, we move the tab
- * to that new notebook, and let this notebook handle the
- * drag
- */
- g_assert (dest != NULL);
- g_assert (dest != src);
-
- /* Move the widgets (tab label and tab content) to the new
- * notebook
- */
- cur_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (src));
- child = gtk_notebook_get_nth_page (GTK_NOTEBOOK (src), cur_page);
- ephy_notebook_move_page (src, dest, child, dest_page);
-
- /* "Give" drag handling to the new notebook */
- drag_start (dest, src->priv->src_notebook, src->priv->src_page);
- drag_stop (src);
- gtk_grab_remove (GTK_WIDGET (src));
-
- dest->priv->motion_notify_handler_id =
- g_signal_connect (G_OBJECT (dest),
- "motion-notify-event",
- G_CALLBACK (motion_notify_cb),
- NULL);
-}
-
-/* this function is only called during dnd, we don't need to emit TABS_REORDERED
- * here, instead we do it on drag_stop
- */
-static void
-move_tab (EphyNotebook *notebook, gint dest_page_num)
-{
- gint cur_page_num;
-
- cur_page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
-
- if (dest_page_num != cur_page_num)
- {
- GtkWidget *cur_page;
- cur_page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook),
- cur_page_num);
- ephy_notebook_move_page (EPHY_NOTEBOOK (notebook), NULL, cur_page,
- dest_page_num);
-
- /* Reset the list of newly opened tabs when moving tabs. */
- g_list_free (notebook->priv->opened_tabs);
- notebook->priv->opened_tabs = NULL;
- }
-}
-
-static void
drag_start (EphyNotebook *notebook,
EphyNotebook *src_notebook,
gint src_page)
@@ -459,41 +391,30 @@ drag_stop (EphyNotebook *notebook)
}
}
-/* Callbacks */
-static gboolean
-button_release_cb (EphyNotebook *notebook, GdkEventButton *event,
- gpointer data)
+/* this function is only called during dnd, we don't need to emit TABS_REORDERED
+ * here, instead we do it on drag_stop
+ */
+static void
+move_tab (EphyNotebook *notebook, gint dest_page_num)
{
- if (notebook->priv->drag_in_progress)
+ gint cur_page_num;
+
+ cur_page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
+
+ if (dest_page_num != cur_page_num)
{
- gint cur_page_num;
GtkWidget *cur_page;
-
- cur_page_num =
- gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
cur_page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook),
cur_page_num);
+ ephy_notebook_move_page (EPHY_NOTEBOOK (notebook), NULL, cur_page,
+ dest_page_num);
- if (!is_in_notebook_window (notebook, event->x_root, event->y_root))
- {
- /* Tab was detached */
- g_signal_emit (G_OBJECT (notebook),
- signals[TAB_DETACHED], 0, cur_page);
- }
-
- /* ungrab the pointer if it's grabbed */
- if (gdk_pointer_is_grabbed ())
- {
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- gtk_grab_remove (GTK_WIDGET (notebook));
- }
+ /* Reset the list of newly opened tabs when moving tabs. */
+ g_list_free (notebook->priv->opened_tabs);
+ notebook->priv->opened_tabs = NULL;
}
- /* This must be called even if a drag isn't happening */
- drag_stop (notebook);
- return FALSE;
}
-
static gboolean
motion_notify_cb (EphyNotebook *notebook, GdkEventMotion *event,
gpointer data)
@@ -542,6 +463,75 @@ motion_notify_cb (EphyNotebook *notebook, GdkEventMotion *event,
return FALSE;
}
+static void
+move_tab_to_another_notebook(EphyNotebook *src,
+ EphyNotebook *dest, gint dest_page)
+{
+ GtkWidget *child;
+ gint cur_page;
+
+ /* This is getting tricky, the tab was dragged in a notebook
+ * in another window of the same app, we move the tab
+ * to that new notebook, and let this notebook handle the
+ * drag
+ */
+ g_assert (dest != NULL);
+ g_assert (dest != src);
+
+ /* Move the widgets (tab label and tab content) to the new
+ * notebook
+ */
+ cur_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (src));
+ child = gtk_notebook_get_nth_page (GTK_NOTEBOOK (src), cur_page);
+ ephy_notebook_move_page (src, dest, child, dest_page);
+
+ /* "Give" drag handling to the new notebook */
+ drag_start (dest, src->priv->src_notebook, src->priv->src_page);
+ drag_stop (src);
+ gtk_grab_remove (GTK_WIDGET (src));
+
+ dest->priv->motion_notify_handler_id =
+ g_signal_connect (G_OBJECT (dest),
+ "motion-notify-event",
+ G_CALLBACK (motion_notify_cb),
+ NULL);
+}
+
+/* Callbacks */
+static gboolean
+button_release_cb (EphyNotebook *notebook, GdkEventButton *event,
+ gpointer data)
+{
+ if (notebook->priv->drag_in_progress)
+ {
+ gint cur_page_num;
+ GtkWidget *cur_page;
+
+ cur_page_num =
+ gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
+ cur_page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook),
+ cur_page_num);
+
+ if (!is_in_notebook_window (notebook, event->x_root, event->y_root))
+ {
+ /* Tab was detached */
+ g_signal_emit (G_OBJECT (notebook),
+ signals[TAB_DETACHED], 0, cur_page);
+ }
+
+ /* ungrab the pointer if it's grabbed */
+ if (gdk_pointer_is_grabbed ())
+ {
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ gtk_grab_remove (GTK_WIDGET (notebook));
+ }
+ }
+ /* This must be called even if a drag isn't happening */
+ drag_stop (notebook);
+ return FALSE;
+}
+
+
static gboolean
button_press_cb (EphyNotebook *notebook,
GdkEventButton *event,
@@ -688,6 +678,35 @@ notebook_drag_data_received_cb (GtkWidget* widget, GdkDragContext *context,
gnome_vfs_uri_list_free (uris);
}
+/*
+ * update_tabs_visibility: Hide tabs if there is only one tab
+ * and the pref is not set.
+ */
+static void
+update_tabs_visibility (EphyNotebook *nb, gboolean before_inserting)
+{
+ gboolean show_tabs;
+ guint num;
+
+ num = gtk_notebook_get_n_pages (GTK_NOTEBOOK (nb));
+
+ if (before_inserting) num++;
+
+ show_tabs = (eel_gconf_get_boolean (CONF_TABS_TABBED) || num > 1) &&
+ nb->priv->show_tabs == TRUE;
+
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (nb), show_tabs);
+}
+
+static void
+tabs_visibility_notifier (GConfClient *client,
+ guint cnxn_id,
+ GConfEntry *entry,
+ EphyNotebook *nb)
+{
+ update_tabs_visibility (nb, FALSE);
+}
+
static void
ephy_notebook_init (EphyNotebook *notebook)
{
@@ -703,6 +722,7 @@ ephy_notebook_init (EphyNotebook *notebook)
notebook->priv->src_page = -1;
notebook->priv->focused_pages = NULL;
notebook->priv->opened_tabs = NULL;
+ notebook->priv->show_tabs = TRUE;
notebooks = g_list_append (notebooks, notebook);
@@ -724,6 +744,10 @@ ephy_notebook_init (EphyNotebook *notebook)
GTK_DEST_DEFAULT_DROP,
url_drag_types,n_url_drag_types,
GDK_ACTION_MOVE | GDK_ACTION_COPY);
+
+ notebook->priv->tabs_vis_notifier_id = eel_gconf_notification_add
+ (CONF_TABS_TABBED,
+ (GConfClientNotifyFunc)tabs_visibility_notifier, notebook);
}
static void
@@ -733,6 +757,8 @@ ephy_notebook_finalize (GObject *object)
notebooks = g_list_remove (notebooks, notebook);
+ eel_gconf_notification_remove (notebook->priv->tabs_vis_notifier_id);
+
if (notebook->priv->focused_pages)
{
g_list_free (notebook->priv->focused_pages);
@@ -742,7 +768,7 @@ ephy_notebook_finalize (GObject *object)
g_free (notebook->priv);
- LOG ("EphyNotebook finalised %p", object)
+ LOG ("EphyNotebook finalised %p", object)
}
static void
@@ -908,23 +934,12 @@ build_tab_label (EphyNotebook *nb, GtkWidget *child)
return hbox;
}
-/*
- * update_tabs_visibility: Hide tabs if there is only one tab
- * and the pref is not set.
- */
-static void
-update_tabs_visibility (EphyNotebook *nb, gboolean before_inserting)
+void
+ephy_notebook_set_show_tabs (EphyNotebook *nb, gboolean show_tabs)
{
- gboolean show_tabs;
- guint num;
+ nb->priv->show_tabs = show_tabs;
- num = gtk_notebook_get_n_pages (GTK_NOTEBOOK (nb));
-
- if (before_inserting) num++;
-
- show_tabs = eel_gconf_get_boolean (CONF_TABS_TABBED) || num > 1;
-
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (nb), show_tabs);
+ update_tabs_visibility (nb, FALSE);
}
void
diff --git a/src/ephy-notebook.h b/src/ephy-notebook.h
index 454f8de10..ef5edd94b 100644
--- a/src/ephy-notebook.h
+++ b/src/ephy-notebook.h
@@ -85,6 +85,9 @@ void ephy_notebook_move_page (EphyNotebook *src,
GtkWidget *src_page,
gint dest_page);
+void ephy_notebook_set_show_tabs (EphyNotebook *nb,
+ gboolean show_tabs);
+
G_END_DECLS
#endif /* EPHY_NOTEBOOK_H */
diff --git a/src/ephy-tabs-menu.c b/src/ephy-tabs-menu.c
index 627cf7f73..afa87e5d0 100644
--- a/src/ephy-tabs-menu.c
+++ b/src/ephy-tabs-menu.c
@@ -21,7 +21,6 @@
#endif
#include "ephy-tabs-menu.h"
-#include "ephy-gobject-misc.h"
#include "ephy-string.h"
#include "egg-menu-merge.h"
#include "ephy-marshal.h"
diff --git a/src/ephy-window.c b/src/ephy-window.c
index b27cdaef3..f821b4e48 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -26,10 +26,10 @@
#include "ephy-bookmarks-menu.h"
#include "ephy-favorites-menu.h"
#include "ephy-state.h"
-#include "ephy-gobject-misc.h"
#include "ppview-toolbar.h"
#include "window-commands.h"
#include "find-dialog.h"
+#include "print-dialog.h"
#include "ephy-shell.h"
#include "eel-gconf-extensions.h"
#include "ephy-prefs.h"
@@ -277,6 +277,7 @@ struct EphyWindowPrivate
GtkNotebook *notebook;
EphyTab *active_tab;
EphyDialog *find_dialog;
+ EphyDialog *print_dialog;
EmbedChromeMask chrome_mask;
gboolean closing;
gboolean is_fullscreen;
@@ -1476,12 +1477,14 @@ ephy_window_finalize (GObject *object)
if (window->priv->find_dialog)
{
- g_signal_handlers_disconnect_by_func (window->priv->find_dialog,
- G_CALLBACK (sync_find_dialog),
- window);
g_object_unref (G_OBJECT (window->priv->find_dialog));
}
+ if (window->priv->print_dialog)
+ {
+ g_object_unref (G_OBJECT (window->priv->print_dialog));
+ }
+
g_object_unref (window->priv->fav_menu);
g_object_unref (window->priv->enc_menu);
g_object_unref (window->priv->tabs_menu);
@@ -1802,6 +1805,7 @@ update_embed_dialogs (EphyWindow *window,
{
EphyEmbed *embed;
EphyDialog *find_dialog = window->priv->find_dialog;
+ EphyDialog *print_dialog = window->priv->print_dialog;
embed = ephy_tab_get_embed (tab);
@@ -1811,6 +1815,13 @@ update_embed_dialogs (EphyWindow *window,
(EPHY_EMBED_DIALOG(find_dialog),
embed);
}
+
+ if (print_dialog)
+ {
+ ephy_embed_dialog_set_embed
+ (EPHY_EMBED_DIALOG(print_dialog),
+ embed);
+ }
}
static void
@@ -1863,6 +1874,38 @@ ephy_window_get_find_dialog (EphyWindow *window)
return dialog;
}
+static void
+print_dialog_preview_cb (EphyDialog *dialog,
+ EphyWindow *window)
+{
+ ephy_window_set_chrome (window, EMBED_CHROME_PPVIEWTOOLBARON);
+ ephy_notebook_set_show_tabs (EPHY_NOTEBOOK (window->priv->notebook), FALSE);
+}
+
+void
+ephy_window_print (EphyWindow *window)
+{
+ EphyDialog *dialog;
+ EphyEmbed *embed;
+
+ if (window->priv->print_dialog)
+ {
+ dialog = window->priv->print_dialog;
+ }
+ else
+ {
+ embed = ephy_window_get_active_embed (window);
+ dialog = print_dialog_new_with_parent (GTK_WIDGET(window),
+ embed, NULL);
+ g_signal_connect (G_OBJECT(dialog),
+ "preview",
+ G_CALLBACK (print_dialog_preview_cb),
+ window);
+ }
+
+ ephy_dialog_show (EPHY_DIALOG (dialog));
+}
+
void
ephy_window_set_zoom (EphyWindow *window,
float zoom)
diff --git a/src/ephy-window.h b/src/ephy-window.h
index 67c6f4000..092c30020 100644
--- a/src/ephy-window.h
+++ b/src/ephy-window.h
@@ -102,8 +102,6 @@ void ephy_window_activate_location (EphyWindow *window);
void ephy_window_update_control (EphyWindow *window,
ControlID control);
-void ephy_window_update_all_controls (EphyWindow *window);
-
EphyTab *ephy_window_get_active_tab (EphyWindow *window);
EphyEmbed *ephy_window_get_active_embed (EphyWindow *window);
@@ -116,6 +114,8 @@ Toolbar *ephy_window_get_toolbar (EphyWindow *window);
EphyDialog *ephy_window_get_find_dialog (EphyWindow *window);
+void ephy_window_print (EphyWindow *window);
+
G_END_DECLS
#endif
diff --git a/src/ppview-toolbar.c b/src/ppview-toolbar.c
index a6e8b9a1f..48706a822 100755
--- a/src/ppview-toolbar.c
+++ b/src/ppview-toolbar.c
@@ -380,12 +380,16 @@ toolbar_cmd_ppv_close (EggMenuMerge *merge,
{
EphyWindow *window = t->priv->window;
EphyEmbed *embed;
+ EphyNotebook *notebook;
embed = ephy_window_get_active_embed (window);
g_return_if_fail (embed != NULL);
ephy_window_set_chrome (t->priv->window, t->priv->original_mask);
+ notebook = ephy_window_get_notebook (window);
+ ephy_notebook_set_show_tabs (notebook, TRUE);
+
ephy_embed_print_preview_close (embed);
}
diff --git a/src/window-commands.c b/src/window-commands.c
index 84294dfc8..74d7779f8 100644
--- a/src/window-commands.c
+++ b/src/window-commands.c
@@ -66,31 +66,11 @@ window_cmd_edit_find (EggAction *action,
ephy_dialog_show (dialog);
}
-static void
-print_dialog_preview_cb (PrintDialog *dialog,
- EphyWindow *window)
-{
- ephy_window_set_chrome (window, EMBED_CHROME_PPVIEWTOOLBARON);
-}
-
void
window_cmd_file_print (EggAction *action,
EphyWindow *window)
{
- EphyDialog *dialog;
- EphyEmbed *embed;
-
- embed = ephy_window_get_active_embed (window);
- g_return_if_fail (embed != NULL);
-
- dialog = print_dialog_new_with_parent (GTK_WIDGET(window),
- embed, NULL);
- g_signal_connect (G_OBJECT(dialog),
- "preview",
- G_CALLBACK (print_dialog_preview_cb),
- window);
- ephy_dialog_set_modal (dialog, TRUE);
- ephy_dialog_show (dialog);
+ ephy_window_print (window);
}
void