[evolution/wip/webkit-composer: 27/262] Refactor EEditorDialog... classes



commit 786fc88a18798f526560e15b0c839c33ef1336ab
Author: Dan Vrátil <dvratil redhat com>
Date:   Tue Aug 7 14:19:26 2012 +0200

    Refactor EEditorDialog... classes
    
    Move some common code to abstract class EEditorDialog and rename
    EEditorUrlPropertiesDialog to EEditorLinkDialog.

 e-util/Makefile.am                                 |    6 +-
 e-util/e-editor-actions.c                          |   16 +-
 e-util/e-editor-dialog.c                           |  148 ++++++++++++++++++++
 e-util/e-editor-dialog.h                           |   70 +++++++++
 e-util/e-editor-find-dialog.c                      |   64 +--------
 e-util/e-editor-find-dialog.h                      |    7 +-
 ...-properties-dialog.c => e-editor-link-dialog.c} |  133 ++++++------------
 e-util/e-editor-link-dialog.h                      |   69 +++++++++
 e-util/e-editor-private.h                          |    4 +-
 e-util/e-editor-replace-dialog.c                   |   69 ++--------
 e-util/e-editor-replace-dialog.h                   |    7 +-
 e-util/e-editor-url-properties-dialog.h            |   70 ---------
 e-util/e-util.h                                    |    3 +-
 13 files changed, 364 insertions(+), 302 deletions(-)
---
diff --git a/e-util/Makefile.am b/e-util/Makefile.am
index dd8fa7e..b0e9c57 100644
--- a/e-util/Makefile.am
+++ b/e-util/Makefile.am
@@ -178,10 +178,11 @@ evolution_util_include_HEADERS =  \
        e-dialog-utils.h \
        e-dialog-widgets.h \
        e-editor-actions.h \
+       e-editor-dialog.h \
        e-editor-find-dialog.h \
+       e-editor-link-dialog.h \
        e-editor-replace-dialog.h \
        e-editor-selection.h \
-       e-editor-url-properties-dialog.h \
        e-editor-utils.h \
        e-editor-widget.h \
        e-editor-widgets.h \
@@ -440,11 +441,12 @@ libevolution_util_la_SOURCES = \
        e-dialog-utils.c \
        e-dialog-widgets.c \
        e-editor-actions.c \
+       e-editor-dialog.c \
        e-editor-find-dialog.c \
+       e-editor-link-dialog.c \
        e-editor-private.h \
        e-editor-replace-dialog.c \
        e-editor-selection.c \
-       e-editor-url-properties-dialog.c \
        e-editor-utils.c \
        e-editor-widget.c \
        e-editor.c \
diff --git a/e-util/e-editor-actions.c b/e-util/e-editor-actions.c
index b53db85..adb40e2 100644
--- a/e-util/e-editor-actions.c
+++ b/e-util/e-editor-actions.c
@@ -673,12 +673,12 @@ static void
 action_insert_link_cb (GtkAction *action,
                        EEditor *editor)
 {
-       if (editor->priv->url_properties_dialog == NULL) {
-               editor->priv->url_properties_dialog =
-                       e_editor_url_properties_dialog_new (editor);
+       if (editor->priv->link_dialog == NULL) {
+               editor->priv->link_dialog =
+                       e_editor_link_dialog_new (editor);
        }
 
-       gtk_window_present (GTK_WINDOW (editor->priv->url_properties_dialog));
+       gtk_window_present (GTK_WINDOW (editor->priv->link_dialog));
 }
 
 static void
@@ -969,12 +969,12 @@ static void
 action_properties_link_cb (GtkAction *action,
                            EEditor *editor)
 {
-       if (editor->priv->url_properties_dialog == NULL) {
-               editor->priv->url_properties_dialog =
-                       e_editor_url_properties_dialog_new (editor);
+       if (editor->priv->link_dialog == NULL) {
+               editor->priv->link_dialog =
+                       e_editor_link_dialog_new (editor);
        }
 
-       gtk_window_present (GTK_WINDOW (editor->priv->url_properties_dialog));
+       gtk_window_present (GTK_WINDOW (editor->priv->link_dialog));
 }
 
 static void
diff --git a/e-util/e-editor-dialog.c b/e-util/e-editor-dialog.c
new file mode 100644
index 0000000..717a534
--- /dev/null
+++ b/e-util/e-editor-dialog.c
@@ -0,0 +1,148 @@
+/*
+ * e-editor-dialog.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "e-editor-dialog.h"
+
+G_DEFINE_ABSTRACT_TYPE (
+       EEditorDialog,
+       e_editor_dialog,
+       GTK_TYPE_WINDOW);
+
+struct _EEditorDialogPrivate {
+       EEditor *editor;
+};
+
+enum {
+       PROP_0,
+       PROP_EDITOR,
+};
+
+static void
+editor_dialog_set_editor (EEditorDialog *dialog,
+                         EEditor *editor)
+{
+       dialog->priv->editor = g_object_ref (editor);
+
+       gtk_window_set_transient_for (
+               GTK_WINDOW (dialog),
+               GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (editor))));
+
+       g_object_notify (G_OBJECT (dialog), "editor");
+}
+
+static void
+editor_dialog_get_property (GObject *object,
+                           guint property_id,
+                           GValue *value,
+                           GParamSpec *pspec)
+{
+       switch (property_id) {
+               case PROP_EDITOR:
+                       g_value_set_object (value,
+                       e_editor_dialog_get_editor (E_EDITOR_DIALOG (object)));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+editor_dialog_set_property (GObject *object,
+                           guint property_id,
+                           const GValue *value,
+                           GParamSpec *pspec)
+{
+       switch (property_id) {
+               case PROP_EDITOR:
+                       editor_dialog_set_editor (
+                               E_EDITOR_DIALOG (object),
+                               g_value_get_object (value));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+editor_dialog_dispose (GObject *object)
+{
+       EEditorDialogPrivate *priv = E_EDITOR_DIALOG (object)->priv;
+
+       g_clear_object (&priv->editor);
+
+       /* Chain up to parent's implementation */
+       G_OBJECT_CLASS (e_editor_dialog_parent_class)->dispose (object);
+}
+
+static void
+e_editor_dialog_class_init (EEditorDialogClass *klass)
+{
+       GObjectClass *object_class;
+
+       g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (EEditorDialogPrivate));
+
+       object_class = G_OBJECT_CLASS (klass);
+       object_class->get_property = editor_dialog_get_property;
+       object_class->set_property = editor_dialog_set_property;
+       object_class->dispose = editor_dialog_dispose;
+
+       g_object_class_install_property (
+               object_class,
+               PROP_EDITOR,
+               g_param_spec_object (
+                       "editor",
+                       NULL,
+                       NULL,
+                       E_TYPE_EDITOR,
+                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+}
+
+static void
+e_editor_dialog_init (EEditorDialog *dialog)
+{
+       dialog->priv = G_TYPE_INSTANCE_GET_PRIVATE (
+               dialog, E_TYPE_EDITOR_DIALOG, EEditorDialogPrivate);
+
+       g_object_set (
+               G_OBJECT (dialog),
+               "destroy-with-parent", TRUE,
+               "resizable", FALSE,
+               "type-hint", GDK_WINDOW_TYPE_HINT_POPUP_MENU,
+               "window-position", GTK_WIN_POS_CENTER_ON_PARENT,
+               NULL);
+
+       /* Don't destroy the dialog when closed! */
+       g_signal_connect (
+               dialog, "delete-event",
+               G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+}
+
+
+
+EEditor *
+e_editor_dialog_get_editor (EEditorDialog *dialog)
+{
+       g_return_val_if_fail (E_IS_EDITOR_DIALOG (dialog), NULL);
+
+       return dialog->priv->editor;
+}
diff --git a/e-util/e-editor-dialog.h b/e-util/e-editor-dialog.h
new file mode 100644
index 0000000..0fa873d
--- /dev/null
+++ b/e-util/e-editor-dialog.h
@@ -0,0 +1,70 @@
+/*
+ * e-editor-dialog.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#if !defined (__E_UTIL_H_INSIDE__) && !defined (LIBEUTIL_COMPILATION)
+#error "Only <e-util/e-util.h> should be included directly."
+#endif
+
+#ifndef E_EDITOR_DIALOG_H
+#define E_EDITOR_DIALOG_H
+
+#include <gtk/gtk.h>
+#include <e-util/e-editor.h>
+
+/* Standard GObject macros */
+#define E_TYPE_EDITOR_DIALOG \
+       (e_editor_dialog_get_type ())
+#define E_EDITOR_DIALOG(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), E_TYPE_EDITOR_DIALOG, EEditorDialog))
+#define E_EDITOR_DIALOG_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), E_TYPE_EDITOR_DIALOG, EEditorDialogClass))
+#define E_IS_EDITOR_DIALOG(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), E_TYPE_EDITOR_DIALOG))
+#define E_IS_EDITOR_DIALOG_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), E_TYPE_EDITOR_DIALOG))
+#define E_EDITOR_DIALOG_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), E_TYPE_EDITOR_DIALOG, EEditorDialogClass))
+
+G_BEGIN_DECLS
+
+typedef struct _EEditorDialog EEditorDialog;
+typedef struct _EEditorDialogClass EEditorDialogClass;
+typedef struct _EEditorDialogPrivate EEditorDialogPrivate;
+
+struct _EEditorDialog {
+       GtkWindow parent;
+
+       EEditorDialogPrivate *priv;
+};
+
+struct _EEditorDialogClass {
+       GtkWindowClass parent_class;
+};
+
+GType          e_editor_dialog_get_type        (void);
+
+EEditor *      e_editor_dialog_get_editor      (EEditorDialog *dialog);
+
+G_END_DECLS
+
+#endif /* E_EDITOR_DIALOG_H */
diff --git a/e-util/e-editor-find-dialog.c b/e-util/e-editor-find-dialog.c
index f3ef249..b8cb8a3 100644
--- a/e-util/e-editor-find-dialog.c
+++ b/e-util/e-editor-find-dialog.c
@@ -28,7 +28,7 @@
 G_DEFINE_TYPE (
        EEditorFindDialog,
        e_editor_find_dialog,
-       GTK_TYPE_WINDOW);
+       E_TYPE_EDITOR_DIALOG);
 
 struct _EEditorFindDialogPrivate {
        GtkWidget *entry;
@@ -40,13 +40,6 @@ struct _EEditorFindDialogPrivate {
        GtkWidget *cancel_button;
 
        GtkWidget *result_label;
-
-       EEditor *editor;
-};
-
-enum {
-       PROP_0,
-       PROP_EDITOR
 };
 
 static void
@@ -78,9 +71,11 @@ static void
 editor_find_dialog_find_cb (EEditorFindDialog *dialog)
 {
        gboolean found;
+       EEditor *editor;
        EEditorWidget *editor_widget;
 
-       editor_widget = e_editor_get_editor_widget (dialog->priv->editor);
+       editor = e_editor_dialog_get_editor (E_EDITOR_DIALOG (dialog));
+       editor_widget = e_editor_get_editor_widget (editor);
        found = webkit_web_view_search_text (
                        WEBKIT_WEB_VIEW (editor_widget),
                        gtk_entry_get_text (
@@ -123,38 +118,8 @@ entry_key_release_event (GtkWidget *widget,
 }
 
 static void
-editor_find_dialog_set_property (GObject *object,
-                                guint property_id,
-                                const GValue *value,
-                                GParamSpec *pspec)
-{
-       EEditorFindDialog *dialog = E_EDITOR_FIND_DIALOG (object);
-
-       switch (property_id) {
-               case PROP_EDITOR:
-                       dialog->priv->editor =
-                               g_object_ref (g_value_get_object (value));
-                       return;
-       }
-
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-editor_find_dialog_finalize (GObject *object)
-{
-       EEditorFindDialogPrivate *priv = E_EDITOR_FIND_DIALOG (object)->priv;
-
-       g_clear_object (&priv->editor);
-
-       /* Chain up to parent's finalize */
-       G_OBJECT_CLASS (e_editor_find_dialog_parent_class)->finalize (object);
-}
-
-static void
 e_editor_find_dialog_class_init (EEditorFindDialogClass *klass)
 {
-       GObjectClass *object_class;
        GtkWidgetClass *widget_class;
 
        e_editor_find_dialog_parent_class = g_type_class_peek_parent (klass);
@@ -162,20 +127,6 @@ e_editor_find_dialog_class_init (EEditorFindDialogClass *klass)
 
        widget_class = GTK_WIDGET_CLASS (klass);
        widget_class->show = editor_find_dialog_show;
-
-       object_class = G_OBJECT_CLASS (klass);
-       object_class->set_property = editor_find_dialog_set_property;
-       object_class->finalize = editor_find_dialog_finalize;
-
-       g_object_class_install_property (
-               object_class,
-               PROP_EDITOR,
-               g_param_spec_object (
-                       "editor",
-                       NULL,
-                       NULL,
-                       E_TYPE_EDITOR,
-                       G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
 }
 
 static void
@@ -258,16 +209,9 @@ e_editor_find_dialog_new(EEditor *editor)
        return GTK_WIDGET (
                g_object_new (
                        E_TYPE_EDITOR_FIND_DIALOG,
-                       "destroy-with-parent", TRUE,
-                       "events", GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK,
                        "editor", editor,
                        "icon-name", GTK_STOCK_FIND,
-                       "resizable", FALSE,
                        "title", N_("Find"),
-                       "transient-for", gtk_widget_get_toplevel (GTK_WIDGET (editor)),
-                       "type", GTK_WINDOW_TOPLEVEL,
-                       "type-hint", GDK_WINDOW_TYPE_HINT_POPUP_MENU,
-                       "window-position", GTK_WIN_POS_CENTER_ON_PARENT,
                        NULL));
 }
 
diff --git a/e-util/e-editor-find-dialog.h b/e-util/e-editor-find-dialog.h
index 43e2d9e..633318b 100644
--- a/e-util/e-editor-find-dialog.h
+++ b/e-util/e-editor-find-dialog.h
@@ -23,8 +23,7 @@
 #ifndef E_EDITOR_FIND_DIALOG_H
 #define E_EDITOR_FIND_DIALOG_H
 
-#include <gtk/gtk.h>
-#include <e-util/e-editor.h>
+#include <e-util/e-editor-dialog.h>
 
 /* Standard GObject macros */
 #define E_TYPE_EDITOR_FIND_DIALOG \
@@ -52,13 +51,13 @@ typedef struct _EEditorFindDialogClass EEditorFindDialogClass;
 typedef struct _EEditorFindDialogPrivate EEditorFindDialogPrivate;
 
 struct _EEditorFindDialog {
-       GtkWindow parent;
+       EEditorDialog parent;
 
        EEditorFindDialogPrivate *priv;
 };
 
 struct _EEditorFindDialogClass {
-       GtkWindowClass parent_class;
+       EEditorDialogClass parent_class;
 };
 
 GType          e_editor_find_dialog_get_type   (void);
diff --git a/e-util/e-editor-url-properties-dialog.c b/e-util/e-editor-link-dialog.c
similarity index 69%
rename from e-util/e-editor-url-properties-dialog.c
rename to e-util/e-editor-link-dialog.c
index 40096b1..1db2790 100644
--- a/e-util/e-editor-url-properties-dialog.c
+++ b/e-util/e-editor-link-dialog.c
@@ -1,5 +1,5 @@
 /*
- * e-editor-url-properties-dialog.h
+ * e-editor-link-dialog.h
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -20,20 +20,18 @@
 #include <config.h>
 #endif
 
-#include "e-editor-url-properties-dialog.h"
+#include "e-editor-link-dialog.h"
 #include "e-editor-selection.h"
 #include "e-editor-utils.h"
 
 #include <glib/gi18n-lib.h>
 
 G_DEFINE_TYPE (
-       EEditorUrlPropertiesDialog,
-       e_editor_url_properties_dialog,
-       GTK_TYPE_WINDOW);
-
-struct _EEditorUrlPropertiesDialogPrivate {
-       EEditor *editor;
+       EEditorLinkDialog,
+       e_editor_link_dialog,
+       E_TYPE_EDITOR_DIALOG);
 
+struct _EEditorLinkDialogPrivate {
        GtkWidget *url_edit;
        GtkWidget *label_edit;
        GtkWidget *test_button;
@@ -43,11 +41,6 @@ struct _EEditorUrlPropertiesDialogPrivate {
        GtkWidget *ok_button;
 };
 
-enum {
-       PROP_0,
-       PROP_EDITOR
-};
-
 static WebKitDOMElement *
 find_anchor_element (WebKitDOMRange *range)
 {
@@ -90,7 +83,7 @@ find_anchor_element (WebKitDOMRange *range)
 
 
 static void
-editor_url_properties_dialog_test_url (EEditorUrlPropertiesDialog *dialog)
+editor_link_dialog_test_link (EEditorLinkDialog *dialog)
 {
        gtk_show_uri (
                gtk_window_get_screen (GTK_WINDOW (dialog)),
@@ -100,27 +93,30 @@ editor_url_properties_dialog_test_url (EEditorUrlPropertiesDialog *dialog)
 }
 
 static void
-editor_url_properties_dialog_close (EEditorUrlPropertiesDialog *dialog)
+editor_link_dialog_close (EEditorLinkDialog *dialog)
 {
        gtk_widget_hide (GTK_WIDGET (dialog));
 }
 
 static void
-editor_url_properties_dialog_remove_link (EEditorUrlPropertiesDialog *dialog)
+editor_link_dialog_remove_link (EEditorLinkDialog *dialog)
 {
-       EEditorSelection *selection;
+       EEditor *editor;
        EEditorWidget *widget;
+       EEditorSelection *selection;
 
-       widget = e_editor_get_editor_widget (dialog->priv->editor);
+       editor = e_editor_dialog_get_editor (E_EDITOR_DIALOG (dialog));
+       widget = e_editor_get_editor_widget (editor);
        selection = e_editor_widget_get_selection (widget);
        e_editor_selection_unlink (selection);
 
-       editor_url_properties_dialog_close (dialog);
+       editor_link_dialog_close (dialog);
 }
 
 static void
-editor_url_properties_dialog_ok (EEditorUrlPropertiesDialog *dialog)
+editor_link_dialog_ok (EEditorLinkDialog *dialog)
 {
+       EEditor *editor;
        EEditorWidget *widget;
        EEditorSelection *selection;
        WebKitDOMDocument *document;
@@ -129,7 +125,8 @@ editor_url_properties_dialog_ok (EEditorUrlPropertiesDialog *dialog)
        WebKitDOMRange *range;
        WebKitDOMElement *link;
 
-       widget = e_editor_get_editor_widget (dialog->priv->editor);
+       editor = e_editor_dialog_get_editor (E_EDITOR_DIALOG (dialog));
+       widget = e_editor_get_editor_widget (editor);
        selection = e_editor_widget_get_selection (widget);
 
        document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (widget));
@@ -176,22 +173,24 @@ editor_url_properties_dialog_ok (EEditorUrlPropertiesDialog *dialog)
                g_free (text);
        }
 
-       editor_url_properties_dialog_close (dialog);
+       editor_link_dialog_close (dialog);
 }
 
 static void
-editor_url_properties_dialog_show (GtkWidget *widget)
+editor_link_dialog_show (GtkWidget *widget)
 {
-       EEditorUrlPropertiesDialog *dialog;
+       EEditor *editor;
        EEditorWidget *editor_widget;
+       EEditorLinkDialog *dialog;
        WebKitDOMDocument *document;
        WebKitDOMDOMWindow *window;
        WebKitDOMDOMSelection *dom_selection;
        WebKitDOMRange *range;
        WebKitDOMElement *link;
 
-       dialog = E_EDITOR_URL_PROPERTIES_DIALOG (widget);
-       editor_widget = e_editor_get_editor_widget (dialog->priv->editor);
+       dialog = E_EDITOR_LINK_DIALOG (widget);
+       editor = e_editor_dialog_get_editor (E_EDITOR_DIALOG (dialog));
+       editor_widget = e_editor_get_editor_widget (editor);
 
        document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (editor_widget));
        window = webkit_dom_document_get_default_view (document);
@@ -246,75 +245,31 @@ editor_url_properties_dialog_show (GtkWidget *widget)
 
  chainup:
        /* Chain up to parent implementation */
-       GTK_WIDGET_CLASS (e_editor_url_properties_dialog_parent_class)->show (widget);
+       GTK_WIDGET_CLASS (e_editor_link_dialog_parent_class)->show (widget);
 }
 
 static void
-editor_url_properties_dialog_set_property (GObject *object,
-                                          guint property_id,
-                                          const GValue *value,
-                                          GParamSpec *pspec)
+e_editor_link_dialog_class_init (EEditorLinkDialogClass *klass)
 {
-       switch (property_id) {
-               case PROP_EDITOR:
-                       E_EDITOR_URL_PROPERTIES_DIALOG (object)->priv->editor =
-                               g_object_ref (g_value_get_object (value));
-                       return;
-       }
-
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-editor_url_properties_dialog_finalize (GObject *object)
-{
-       EEditorUrlPropertiesDialogPrivate *priv;
-       priv = E_EDITOR_URL_PROPERTIES_DIALOG (object)->priv;
-
-       g_clear_object (&priv->editor);
-
-       /* Chain up to parent implementation */
-       G_OBJECT_CLASS (e_editor_url_properties_dialog_parent_class)->finalize (object);
-}
-
-static void
-e_editor_url_properties_dialog_class_init (EEditorUrlPropertiesDialogClass *klass)
-{
-       GObjectClass *object_class;
        GtkWidgetClass *widget_class;
 
-       e_editor_url_properties_dialog_parent_class  = g_type_class_peek_parent (klass);
-       g_type_class_add_private (klass, sizeof (EEditorUrlPropertiesDialogPrivate));
-
+       e_editor_link_dialog_parent_class  = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (EEditorLinkDialogPrivate));
 
        widget_class = GTK_WIDGET_CLASS (klass);
-       widget_class->show = editor_url_properties_dialog_show;
-
-       object_class = G_OBJECT_CLASS (klass);
-       object_class->set_property = editor_url_properties_dialog_set_property;
-       object_class->finalize = editor_url_properties_dialog_finalize;
-
-       g_object_class_install_property (
-               object_class,
-               PROP_EDITOR,
-               g_param_spec_object (
-                       "editor",
-                       NULL,
-                       NULL,
-                       E_TYPE_EDITOR,
-                       G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+       widget_class->show = editor_link_dialog_show;
 }
 
 static void
-e_editor_url_properties_dialog_init (EEditorUrlPropertiesDialog *dialog)
+e_editor_link_dialog_init (EEditorLinkDialog *dialog)
 {
        GtkGrid *main_layout;
        GtkBox *button_box;
        GtkWidget *widget;
 
        dialog->priv = G_TYPE_INSTANCE_GET_PRIVATE (
-                               dialog, E_TYPE_EDITOR_URL_PROPERTIES_DIALOG,
-                               EEditorUrlPropertiesDialogPrivate);
+                               dialog, E_TYPE_EDITOR_LINK_DIALOG,
+                               EEditorLinkDialogPrivate);
 
        main_layout = GTK_GRID (gtk_grid_new ());
        gtk_grid_set_row_spacing (main_layout, 10);
@@ -326,15 +281,15 @@ e_editor_url_properties_dialog_init (EEditorUrlPropertiesDialog *dialog)
        gtk_grid_attach (main_layout, widget, 1, 0, 1, 1);
        dialog->priv->url_edit = widget;
 
-       widget = gtk_label_new_with_mnemonic (_("URL:"));
+       widget = gtk_label_new_with_mnemonic (_("LINK:"));
        gtk_label_set_mnemonic_widget (GTK_LABEL (widget), dialog->priv->url_edit);
        gtk_grid_attach (main_layout, widget, 0, 0, 1, 1);
 
-       widget = gtk_button_new_with_label (_("Test URL..."));
+       widget = gtk_button_new_with_label (_("Test LINK..."));
        gtk_grid_attach (main_layout, widget, 2, 0, 1, 1);
        g_signal_connect_swapped (
                widget, "clicked",
-               G_CALLBACK (editor_url_properties_dialog_test_url), dialog);
+               G_CALLBACK (editor_link_dialog_test_link), dialog);
        dialog->priv->test_button = widget;
 
        widget = gtk_entry_new ();
@@ -353,21 +308,21 @@ e_editor_url_properties_dialog_init (EEditorUrlPropertiesDialog *dialog)
        widget = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
        g_signal_connect_swapped (
                widget, "clicked",
-               G_CALLBACK (editor_url_properties_dialog_close), dialog);
+               G_CALLBACK (editor_link_dialog_close), dialog);
        gtk_box_pack_start (button_box, widget, FALSE, FALSE, 5);
        dialog->priv->close_button = widget;
 
        widget = gtk_button_new_with_label (_("Remove Link"));
        g_signal_connect_swapped (
                widget, "clicked",
-               G_CALLBACK (editor_url_properties_dialog_remove_link), dialog);
+               G_CALLBACK (editor_link_dialog_remove_link), dialog);
        gtk_box_pack_start (button_box, widget, FALSE, FALSE, 5);
        dialog->priv->remove_link_button = widget;
 
        widget = gtk_button_new_from_stock (GTK_STOCK_OK);
        g_signal_connect_swapped (
                widget, "clicked",
-               G_CALLBACK (editor_url_properties_dialog_ok), dialog);
+               G_CALLBACK (editor_link_dialog_ok), dialog);
        gtk_box_pack_start (button_box, widget, FALSE, FALSE, 5);
        dialog->priv->ok_button = widget;
 
@@ -375,19 +330,13 @@ e_editor_url_properties_dialog_init (EEditorUrlPropertiesDialog *dialog)
 }
 
 GtkWidget *
-e_editor_url_properties_dialog_new (EEditor *editor)
+e_editor_link_dialog_new (EEditor *editor)
 {
        return GTK_WIDGET (
                g_object_new (
-                       E_TYPE_EDITOR_URL_PROPERTIES_DIALOG,
-                       "destroy-with-parent", TRUE,
-                       "events", GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK,
+                       E_TYPE_EDITOR_LINK_DIALOG,
                        "editor", editor,
                        "icon-name", "insert-link",
-                       "resizable", FALSE,
                        "title", N_("Link Properties"),
-                       "transient-for", gtk_widget_get_toplevel (GTK_WIDGET (editor)),
-                       "type", GTK_WINDOW_TOPLEVEL,
-                       "window-position", GTK_WIN_POS_CENTER_ON_PARENT,
                        NULL));
 }
diff --git a/e-util/e-editor-link-dialog.h b/e-util/e-editor-link-dialog.h
new file mode 100644
index 0000000..8f0ea49
--- /dev/null
+++ b/e-util/e-editor-link-dialog.h
@@ -0,0 +1,69 @@
+/*
+ * e-editor-link-dialog.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#if !defined (__E_UTIL_H_INSIDE__) && !defined (LIBEUTIL_COMPILATION)
+#error "Only <e-util/e-util.h> should be included directly."
+#endif
+
+#ifndef E_EDITOR_LINK_DIALOG_H
+#define E_EDITOR_LINK_DIALOG_H
+
+#include <e-util/e-editor-dialog.h>
+
+/* Standard GObject macros */
+#define E_TYPE_EDITOR_LINK_DIALOG \
+       (e_editor_link_dialog_get_type ())
+#define E_EDITOR_LINK_DIALOG(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), E_TYPE_EDITOR_LINK_DIALOG, EEditorLinkDialog))
+#define E_EDITOR_LINK_DIALOG_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), E_TYPE_EDITOR_LINK_DIALOG, EEditorLinkDialogClass))
+#define E_IS_EDITOR_LINK_DIALOG(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), E_TYPE_EDITOR_LINK_DIALOG))
+#define E_IS_EDITOR_LINK_DIALOG_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), E_TYPE_EDITOR_LINK_DIALOG))
+#define E_EDITOR_LINK_DIALOG_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), E_TYPE_EDITOR_LINK_DIALOG, EEditorLinkDialogClass))
+
+G_BEGIN_DECLS
+
+typedef struct _EEditorLinkDialog EEditorLinkDialog;
+typedef struct _EEditorLinkDialogClass EEditorLinkDialogClass;
+typedef struct _EEditorLinkDialogPrivate EEditorLinkDialogPrivate;
+
+struct _EEditorLinkDialog {
+       EEditorDialog parent;
+
+       EEditorLinkDialogPrivate *priv;
+};
+
+struct _EEditorLinkDialogClass {
+       EEditorDialogClass parent_class;
+};
+
+GType          e_editor_link_dialog_get_type   (void);
+
+GtkWidget*     e_editor_link_dialog_new        (EEditor *editor);
+
+G_END_DECLS
+
+#endif /* E_EDITOR_LINK_DIALOG_H */
diff --git a/e-util/e-editor-private.h b/e-util/e-editor-private.h
index 25df5ef..5872a8a 100644
--- a/e-util/e-editor-private.h
+++ b/e-util/e-editor-private.h
@@ -26,7 +26,7 @@
 #include <e-editor-widget.h>
 #include <e-editor-find-dialog.h>
 #include <e-editor-replace-dialog.h>
-#include <e-editor-url-properties-dialog.h>
+#include <e-editor-link-dialog.h>
 
 #ifdef HAVE_XFREE
 #include <X11/XF86keysym.h>
@@ -57,7 +57,7 @@ struct _EEditorPrivate {
 
        GtkWidget *find_dialog;
        GtkWidget *replace_dialog;
-       GtkWidget *url_properties_dialog;
+       GtkWidget *link_dialog;
 
        GtkWidget *color_combo_box;
        GtkWidget *mode_combo_box;
diff --git a/e-util/e-editor-replace-dialog.c b/e-util/e-editor-replace-dialog.c
index 150af90..b372d05 100644
--- a/e-util/e-editor-replace-dialog.c
+++ b/e-util/e-editor-replace-dialog.c
@@ -27,7 +27,7 @@
 G_DEFINE_TYPE (
        EEditorReplaceDialog,
        e_editor_replace_dialog,
-       GTK_TYPE_WINDOW);
+       E_TYPE_EDITOR_DIALOG);
 
 struct _EEditorReplaceDialogPrivate {
        GtkWidget *search_entry;
@@ -43,23 +43,18 @@ struct _EEditorReplaceDialogPrivate {
        GtkWidget *skip_button;
        GtkWidget *replace_button;
        GtkWidget *replace_all_button;
-
-       EEditor *editor;
-};
-
-enum {
-       PROP_0,
-       PROP_EDITOR
 };
 
 static gboolean
 jump (EEditorReplaceDialog *dialog)
 {
+       EEditor *editor;
        WebKitWebView *webview;
        gboolean found;
 
+       editor = e_editor_dialog_get_editor (E_EDITOR_DIALOG (dialog));
        webview = WEBKIT_WEB_VIEW (
-                       e_editor_get_editor_widget (dialog->priv->editor));
+                       e_editor_get_editor_widget (editor));
 
        found = webkit_web_view_search_text (
                webview,
@@ -90,6 +85,7 @@ editor_replace_dialog_skip_cb (EEditorReplaceDialog *dialog)
 static void
 editor_replace_dialog_replace_cb (EEditorReplaceDialog *dialog)
 {
+       EEditor *editor;
        EEditorWidget *editor_widget;
        EEditorSelection *selection;
 
@@ -104,7 +100,8 @@ editor_replace_dialog_replace_cb (EEditorReplaceDialog *dialog)
                gtk_widget_hide (dialog->priv->result_label);
        }
 
-       editor_widget = e_editor_get_editor_widget (dialog->priv->editor);
+       editor = e_editor_dialog_get_editor (E_EDITOR_DIALOG (dialog));
+       editor_widget = e_editor_get_editor_widget (editor);
        selection = e_editor_widget_get_selection (editor_widget);
 
        e_editor_selection_replace (
@@ -117,11 +114,13 @@ editor_replace_dialog_replace_all_cb (EEditorReplaceDialog *dialog)
 {
        gint i = 0;
        gchar *result;
+       EEditor *editor;
        EEditorWidget *widget;
        EEditorSelection *selection;
        const gchar *replacement;
 
-       widget = e_editor_get_editor_widget (dialog->priv->editor);
+       editor = e_editor_dialog_get_editor (E_EDITOR_DIALOG (dialog));
+       widget = e_editor_get_editor_widget (editor);
        selection = e_editor_widget_get_selection (widget);
        replacement = gtk_entry_get_text (GTK_ENTRY (dialog->priv->replace_entry));
 
@@ -169,36 +168,8 @@ editor_replace_dialog_show (GtkWidget *widget)
 }
 
 static void
-editor_replace_dialog_set_property (GObject *object,
-                                   guint property_id,
-                                   const GValue *value,
-                                   GParamSpec *pspec)
-{
-       switch (property_id) {
-               case PROP_EDITOR:
-                       E_EDITOR_REPLACE_DIALOG (object)->priv->editor =
-                               g_object_ref (g_value_get_object (value));
-                       return;
-       }
-
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-editor_replace_dialog_finalize (GObject *object)
-{
-       EEditorReplaceDialogPrivate *priv = E_EDITOR_REPLACE_DIALOG (object)->priv;
-
-       g_clear_object (&priv->editor);
-
-       /* Chain up to parent implementation */
-       G_OBJECT_CLASS (e_editor_replace_dialog_parent_class)->finalize (object);
-}
-
-static void
 e_editor_replace_dialog_class_init (EEditorReplaceDialogClass *klass)
 {
-       GObjectClass *object_class;
        GtkWidgetClass *widget_class;
 
        e_editor_replace_dialog_parent_class = g_type_class_peek_parent (klass);
@@ -206,20 +177,6 @@ e_editor_replace_dialog_class_init (EEditorReplaceDialogClass *klass)
 
        widget_class = GTK_WIDGET_CLASS (klass);
        widget_class->show = editor_replace_dialog_show;
-
-       object_class = G_OBJECT_CLASS (klass);
-       object_class->set_property = editor_replace_dialog_set_property;
-       object_class->finalize = editor_replace_dialog_finalize;
-
-       g_object_class_install_property (
-               object_class,
-               PROP_EDITOR,
-               g_param_spec_object (
-                       "editor",
-                       NULL,
-                       NULL,
-                       E_TYPE_EDITOR,
-                       G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
 }
 
 static void
@@ -326,14 +283,8 @@ e_editor_replace_dialog_new (EEditor *editor)
        return GTK_WIDGET (
                g_object_new (
                        E_TYPE_EDITOR_REPLACE_DIALOG,
-                       "destroy-with-parent", TRUE,
-                       "events", GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK,
                        "editor", editor,
                        "icon-name", GTK_STOCK_FIND_AND_REPLACE,
-                       "resizable", FALSE,
                        "title", N_("Replace"),
-                       "transient-for", gtk_widget_get_toplevel (GTK_WIDGET (editor)),
-                       "type", GTK_WINDOW_TOPLEVEL,
-                       "window-position", GTK_WIN_POS_CENTER_ON_PARENT,
                        NULL));
 }
diff --git a/e-util/e-editor-replace-dialog.h b/e-util/e-editor-replace-dialog.h
index 99132f5..8912751 100644
--- a/e-util/e-editor-replace-dialog.h
+++ b/e-util/e-editor-replace-dialog.h
@@ -23,8 +23,7 @@
 #ifndef E_EDITOR_REPLACE_DIALOG_H
 #define E_EDITOR_REPLACE_DIALOG_H
 
-#include <gtk/gtk.h>
-#include <e-util/e-editor.h>
+#include <e-util/e-editor-dialog.h>
 
 /* Standard GObject macros */
 #define E_TYPE_EDITOR_REPLACE_DIALOG \
@@ -52,13 +51,13 @@ typedef struct _EEditorReplaceDialogClass EEditorReplaceDialogClass;
 typedef struct _EEditorReplaceDialogPrivate EEditorReplaceDialogPrivate;
 
 struct _EEditorReplaceDialog {
-       GtkWindow parent;
+       EEditorDialog parent;
 
        EEditorReplaceDialogPrivate *priv;
 };
 
 struct _EEditorReplaceDialogClass {
-       GtkWindowClass parent_class;
+       EEditorDialogClass parent_class;
 };
 
 GType          e_editor_replace_dialog_get_type        (void);
diff --git a/e-util/e-util.h b/e-util/e-util.h
index 7b4491b..586ab48 100644
--- a/e-util/e-util.h
+++ b/e-util/e-util.h
@@ -92,10 +92,11 @@
 #include <e-util/e-dialog-utils.h>
 #include <e-util/e-dialog-widgets.h>
 #include <e-util/e-editor-actions.h>
+#include <e-util/e-editor-dialog.h>
 #include <e-util/e-editor-find-dialog.h>
+#include <e-util/e-editor-link-dialog.h>
 #include <e-util/e-editor-replace-dialog.h>
 #include <e-util/e-editor-selection.h>
-#include <e-util/e-editor-url-properties-dialog.h>
 #include <e-util/e-editor-utils.h>
 #include <e-util/e-editor-widget.h>
 #include <e-util/e-editor-widgets.h>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]