diff options
-rw-r--r-- | ChangeLog | 17 | ||||
-rw-r--r-- | embed/ephy-embed-single.c | 20 | ||||
-rw-r--r-- | embed/ephy-embed-single.h | 7 | ||||
-rw-r--r-- | embed/mozilla/mozilla-embed-persist.cpp | 2 | ||||
-rw-r--r-- | embed/mozilla/mozilla-embed-single.cpp | 39 | ||||
-rw-r--r-- | embed/mozilla/mozilla-embed.cpp | 49 | ||||
-rw-r--r-- | embed/mozilla/mozilla-embed.h | 6 | ||||
-rw-r--r-- | src/ephy-nautilus-view.c | 6 | ||||
-rw-r--r-- | src/ephy-session.c | 5 | ||||
-rw-r--r-- | src/ephy-shell.c | 24 | ||||
-rw-r--r-- | src/ephy-tab.c | 7 | ||||
-rw-r--r-- | src/ephy-window.c | 1 |
12 files changed, 72 insertions, 111 deletions
@@ -1,3 +1,20 @@ +2003-11-11 Marco Pesenti Gritti <marco@gnome.org> + + * embed/ephy-embed-single.c: (ephy_embed_single_class_init): + * embed/ephy-embed-single.h: + * embed/mozilla/mozilla-embed-persist.cpp: + * embed/mozilla/mozilla-embed-single.cpp: + * embed/mozilla/mozilla-embed.cpp: + * embed/mozilla/mozilla-embed.h: + * src/ephy-nautilus-view.c: (gnv_embed_new_window_cb): + * src/ephy-session.c: (write_ephy_window): + * src/ephy-shell.c: (ephy_shell_init): + * src/ephy-tab.c: (ephy_tab_size_to_cb): + * src/ephy-window.c: (translate_default_chrome): + + Build xul dialogs using GtkWindow+GtkMozEmbed. + Make src code simpler and fix a pair of bugs. + 2003-11-10 Christian Persch <chpe@cvs.gnome.org> * data/glade/Makefile.am: diff --git a/embed/ephy-embed-single.c b/embed/ephy-embed-single.c index c09a0defa..359b33069 100644 --- a/embed/ephy-embed-single.c +++ b/embed/ephy-embed-single.c @@ -31,12 +31,6 @@ #include <string.h> -enum -{ - NEW_WINDOW, - LAST_SIGNAL -}; - #define EPHY_EMBED_SINGLE_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_EMBED_SINGLE, EphyEmbedSinglePrivate)) struct EphyEmbedSinglePrivate @@ -53,8 +47,6 @@ ephy_embed_single_init (EphyEmbedSingle *ges); static GObjectClass *parent_class = NULL; -static guint ephy_embed_single_signals[LAST_SIGNAL] = { 0 }; - GType ephy_embed_single_get_type (void) { @@ -90,18 +82,6 @@ ephy_embed_single_class_init (EphyEmbedSingleClass *klass) parent_class = (GObjectClass *) g_type_class_peek_parent (klass); - ephy_embed_single_signals[NEW_WINDOW] = - g_signal_new ("new_window_orphan", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EphyEmbedSingleClass, new_window), - NULL, NULL, - ephy_marshal_VOID__POINTER_INT, - G_TYPE_NONE, - 2, - G_TYPE_POINTER, - G_TYPE_INT); - g_type_class_add_private (object_class, sizeof(EphyEmbedSinglePrivate)); } diff --git a/embed/ephy-embed-single.h b/embed/ephy-embed-single.h index 598ccdfd3..8dc55c1ee 100644 --- a/embed/ephy-embed-single.h +++ b/embed/ephy-embed-single.h @@ -107,13 +107,6 @@ struct EphyEmbedSingleClass { GObjectClass parent_class; - /* Signals */ - void (* new_window) (EphyEmbedSingle *shell, - EphyEmbed **new_embed, - EmbedChromeMask chromemask); - - /* Methods */ - void (* clear_cache) (EphyEmbedSingle *shell); void (* set_offline_mode) (EphyEmbedSingle *shell, gboolean offline); diff --git a/embed/mozilla/mozilla-embed-persist.cpp b/embed/mozilla/mozilla-embed-persist.cpp index d1a0785ce..166942139 100644 --- a/embed/mozilla/mozilla-embed-persist.cpp +++ b/embed/mozilla/mozilla-embed-persist.cpp @@ -154,7 +154,7 @@ impl_save (EphyEmbedPersist *persist) EphyBrowser *browser = NULL; if (embed) { - browser = (EphyBrowser *) mozilla_embed_get_ephy_browser (MOZILLA_EMBED(embed)); + browser = (EphyBrowser *) _mozilla_embed_get_ephy_browser (MOZILLA_EMBED(embed)); g_return_val_if_fail (browser != NULL, FALSE); } diff --git a/embed/mozilla/mozilla-embed-single.cpp b/embed/mozilla/mozilla-embed-single.cpp index df298d73a..6f03b5ea9 100644 --- a/embed/mozilla/mozilla-embed-single.cpp +++ b/embed/mozilla/mozilla-embed-single.cpp @@ -25,6 +25,7 @@ #include "glib.h" #include "ephy-debug.h" #include "gtkmozembed.h" +#include "mozilla-embed.h" #include "mozilla-embed-single.h" #include "ephy-file-helpers.h" #include "mozilla-notifiers.h" @@ -231,43 +232,9 @@ mozilla_embed_single_new_window_orphan_cb (GtkMozEmbedSingle *embed, guint chrome_mask, EphyEmbedSingle *shell) { - /* FIXME conversion duped in mozilla_embed */ - EphyEmbed *new_embed; - int i; - EmbedChromeMask mask = EMBED_CHROME_OPENASPOPUP; - - struct - { - guint chromemask; - EmbedChromeMask embed_mask; - } - conversion_map [] = - { - { GTK_MOZ_EMBED_FLAG_DEFAULTCHROME, EMBED_CHROME_DEFAULT }, - { GTK_MOZ_EMBED_FLAG_MENUBARON, EMBED_CHROME_MENUBARON }, - { GTK_MOZ_EMBED_FLAG_TOOLBARON, EMBED_CHROME_TOOLBARON }, - { GTK_MOZ_EMBED_FLAG_STATUSBARON, EMBED_CHROME_STATUSBARON }, - { GTK_MOZ_EMBED_FLAG_WINDOWRAISED, EMBED_CHROME_WINDOWRAISED }, - { GTK_MOZ_EMBED_FLAG_WINDOWLOWERED, EMBED_CHROME_WINDOWLOWERED }, - { GTK_MOZ_EMBED_FLAG_CENTERSCREEN, EMBED_CHROME_CENTERSCREEN }, - { GTK_MOZ_EMBED_FLAG_OPENASDIALOG, EMBED_CHROME_OPENASDIALOG }, - { GTK_MOZ_EMBED_FLAG_OPENASCHROME, EMBED_CHROME_OPENASCHROME }, - { 0, EMBED_CHROME_NONE } - }; + g_assert (chrome_mask && GTK_MOZ_EMBED_FLAG_OPENASCHROME); - for (i = 0; conversion_map[i].chromemask != 0; i++) - { - if (chrome_mask & conversion_map[i].chromemask) - { - mask = (EmbedChromeMask) (mask | conversion_map[i].embed_mask); - } - } - - g_signal_emit_by_name (shell, "new_window_orphan", &new_embed, mask); - - g_assert (new_embed != NULL); - - *retval = GTK_MOZ_EMBED(EPHY_EMBED(new_embed)); + *retval = _mozilla_embed_new_xul_dialog (); } static void diff --git a/embed/mozilla/mozilla-embed.cpp b/embed/mozilla/mozilla-embed.cpp index c41ecbf3a..0b8e3fea7 100644 --- a/embed/mozilla/mozilla-embed.cpp +++ b/embed/mozilla/mozilla-embed.cpp @@ -277,7 +277,7 @@ mozilla_embed_init (MozillaEmbed *embed) } gpointer -mozilla_embed_get_ephy_browser (MozillaEmbed *embed) +_mozilla_embed_get_ephy_browser (MozillaEmbed *embed) { g_return_val_if_fail (embed->priv->browser != NULL, NULL); @@ -1015,11 +1015,15 @@ mozilla_embed_new_window_cb (GtkMozEmbed *embed, { GTK_MOZ_EMBED_FLAG_WINDOWRAISED, EMBED_CHROME_WINDOWRAISED }, { GTK_MOZ_EMBED_FLAG_WINDOWLOWERED, EMBED_CHROME_WINDOWLOWERED }, { GTK_MOZ_EMBED_FLAG_CENTERSCREEN, EMBED_CHROME_CENTERSCREEN }, - { GTK_MOZ_EMBED_FLAG_OPENASDIALOG, EMBED_CHROME_OPENASDIALOG }, - { GTK_MOZ_EMBED_FLAG_OPENASCHROME, EMBED_CHROME_OPENASCHROME }, { 0, EMBED_CHROME_NONE } }; + if (chromemask && GTK_MOZ_EMBED_FLAG_OPENASCHROME) + { + *newEmbed = _mozilla_embed_new_xul_dialog (); + return; + } + for (i = 0; conversion_map[i].chromemask != 0; i++) { if (chromemask & conversion_map[i].chromemask) @@ -1114,3 +1118,42 @@ ephy_embed_init (EphyEmbedClass *embed_class) embed_class->print_preview_n_pages = impl_print_preview_n_pages; embed_class->print_preview_navigate = impl_print_preview_navigate; } + +void +xul_visibility_cb (GtkWidget *embed, gboolean visibility, GtkWidget *window) +{ + if (visibility) + { + gtk_widget_show (window); + } + else + { + gtk_widget_hide (window); + } +} + +void +xul_size_to_cb (GtkWidget *embed, gint width, gint height) +{ + gtk_widget_set_size_request (embed, width, height); +} + +GtkMozEmbed * +_mozilla_embed_new_xul_dialog (void) +{ + GtkWidget *window, *embed; + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + embed = gtk_moz_embed_new (); + gtk_widget_show (embed); + gtk_container_add (GTK_CONTAINER (window), embed); + + g_signal_connect_swapped (embed, "destroy_browser", + G_CALLBACK (gtk_widget_destroy), window); + g_signal_connect (embed, "visibility", + G_CALLBACK (xul_visibility_cb), window); + g_signal_connect (embed, "size_to", + G_CALLBACK (xul_size_to_cb), NULL); + + return GTK_MOZ_EMBED (embed); +} diff --git a/embed/mozilla/mozilla-embed.h b/embed/mozilla/mozilla-embed.h index 8070ac480..4eba0dba9 100644 --- a/embed/mozilla/mozilla-embed.h +++ b/embed/mozilla/mozilla-embed.h @@ -52,9 +52,11 @@ struct MozillaEmbedClass GtkMozEmbedClass parent_class; }; -GType mozilla_embed_get_type (void); +GType mozilla_embed_get_type (void); -gpointer mozilla_embed_get_ephy_browser (MozillaEmbed *embed); +gpointer _mozilla_embed_get_ephy_browser (MozillaEmbed *embed); + +GtkMozEmbed *_mozilla_embed_new_xul_dialog (void); G_END_DECLS diff --git a/src/ephy-nautilus-view.c b/src/ephy-nautilus-view.c index b79e0d7fc..e1c799dbd 100644 --- a/src/ephy-nautilus-view.c +++ b/src/ephy-nautilus-view.c @@ -409,12 +409,6 @@ gnv_embed_new_window_cb (EphyEmbed *embed, EphyEmbed **new_embed, EphyWindow *window; window = ephy_window_new (); - if (!(chromemask & EMBED_CHROME_OPENASCHROME)) - { - ephy_window_set_chrome (window, - chromemask | - EMBED_CHROME_OPENASPOPUP); - } new_tab = ephy_tab_new (); ephy_window_add_tab (window, new_tab, EPHY_NOTEBOOK_INSERT_LAST, FALSE); diff --git a/src/ephy-session.c b/src/ephy-session.c index 63a646724..2a78ccb83 100644 --- a/src/ephy-session.c +++ b/src/ephy-session.c @@ -541,7 +541,6 @@ static int write_ephy_window (xmlTextWriterPtr writer, EphyWindow *window) { - EmbedChromeMask chrome; GList *tabs, *l; int ret; @@ -552,10 +551,6 @@ write_ephy_window (xmlTextWriterPtr writer, */ if (tabs == NULL) return 0; - /* skip if it's a XUL dialog */ - chrome = ephy_window_get_chrome (window); - if (chrome & EMBED_CHROME_OPENASCHROME) return 0; - ret = xmlTextWriterStartElement (writer, "window"); if (ret < 0) return ret; diff --git a/src/ephy-shell.c b/src/ephy-shell.c index c476d3ac1..2a10315c6 100644 --- a/src/ephy-shell.c +++ b/src/ephy-shell.c @@ -145,25 +145,6 @@ ephy_shell_class_init (EphyShellClass *klass) } static void -ephy_shell_new_window_cb (EphyEmbedShell *shell, - EphyEmbed **new_embed, - EmbedChromeMask chromemask, - gpointer data) -{ - EphyTab *new_tab; - EphyWindow *window; - - g_assert (new_embed != NULL); - - window = ephy_window_new (); - ephy_window_set_chrome (window, chromemask); - - new_tab = ephy_tab_new (); - ephy_window_add_tab (window, new_tab, EPHY_NOTEBOOK_INSERT_GROUPED, FALSE); - *new_embed = ephy_tab_get_embed (new_tab); -} - -static void ephy_shell_init (EphyShell *gs) { EphyEmbedSingle *single; @@ -197,11 +178,6 @@ ephy_shell_init (EphyShell *gs) single = ephy_embed_shell_get_embed_single (EPHY_EMBED_SHELL (gs)); if (single != NULL) { - g_signal_connect (G_OBJECT (single), - "new_window_orphan", - G_CALLBACK(ephy_shell_new_window_cb), - NULL); - ephy_init_services (gs); } else diff --git a/src/ephy-tab.c b/src/ephy-tab.c index 35a6a09cc..a2c4f1c65 100644 --- a/src/ephy-tab.c +++ b/src/ephy-tab.c @@ -952,13 +952,8 @@ ephy_tab_size_to_cb (EphyEmbed *embed, gint width, gint height, * has been resized. It appears to be the only way * to have the window sized according to embed * size correctly. - * We dont do it for XUL dialogs because in that case - * a "forced" requisition appear correct. */ - if (!(chromemask & EMBED_CHROME_OPENASCHROME)) - { - g_idle_add (let_me_resize_hack, embed); - } + g_idle_add (let_me_resize_hack, embed); } } diff --git a/src/ephy-window.c b/src/ephy-window.c index 3b81ede9e..c93689f54 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -1573,7 +1573,6 @@ translate_default_chrome (EmbedChromeMask *chrome_mask) EMBED_CHROME_WINDOWLOWERED | EMBED_CHROME_CENTERSCREEN | EMBED_CHROME_OPENASDIALOG | - EMBED_CHROME_OPENASCHROME | EMBED_CHROME_OPENASPOPUP); /* Load defaults */ |