gEDA-dev: GschemDialog (work in progress)
Ivan Stankovic
ivan.stankovic at fer.hr
Sun May 13 15:37:14 EDT 2007
On Thu, May 10, 2007 at 01:27:46AM +0100, Peter Clifton wrote:
> I sometimes work with dual monitor systems, and wonder if the position
> (with Xinerama, say), should be relative to the screen the gschem window
> is on, not absolute coordinates. I've not got a dual screen setup at the
> moment to try on at the moment. Having never coded anything explicitly
> for Xinerama, I'm not sure what API is necessary.
I haven't had experience with Xinerama so I can't comment on that. But
I say let's first get the 99% functionality right and merged, the
other 1% will surely follow easily.
[...]
> Sounds really "useful" - we can move the window, but only after its
> already been redrawn once.
Yes, that seems to be the case. After investigating the problem, I
really can't see any way to specify position and size before the
first widget redraw. The problem is, gdk requires a widget(window) to
be mapped first which results in an actual drawing operation.
Immediately after that we reposition and resize the widget, which is
noticeable.
In the patch below, I modified map_handler() to do this:
gtk_window_set_keep_below(GTK_WINDOW(widget), TRUE);
/* Let GTK map the window first */
GTK_WIDGET_CLASS (gschem_dialog_parent_class)->map (widget);
restore_geometry (dialog);
gtk_window_set_keep_below(GTK_WINDOW(widget), FALSE);
The difference to your patch, Peter, is that I call
gtk_window_set_keep_below() which first hides the dialog, then
the mapping is done and finally I raise the dialog so it can be
visible. However, this doesn't work as well as I imagined. The
positioning seems to be ok, but resizing is sometimes really obvious.
If anyone has an idea on how to solve this, please speak up.
The patch below also now saves geometry info on program exit and
we no longer track confirmation dialogs and generic file dialogs.
--
Ivan Stankovic, ivan.stankovic at fer.hr
"Protect your digital freedom and privacy, eliminate DRM,
learn more at http://www.defectivebydesign.org/what_is_drm"
-------------- next part --------------
>From a1db3c76ed55d086a1d3de99b9f670ec84606210 Mon Sep 17 00:00:00 2001
From: Ivan Stankovic <ivan.stankovic at fer.hr>
Date: Sun, 13 May 2007 21:06:30 +0200
Subject: [PATCH] Remember dialog position and size
---
gschem/include/Makefile.am | 3 +-
gschem/include/gschem_dialog.h | 55 ++++++
gschem/include/x_compselect.h | 6 +-
gschem/include/x_log.h | 4 +-
gschem/include/x_multiattrib.h | 6 +-
gschem/include/x_pagesel.h | 6 +-
gschem/include/x_print.h | 4 +-
gschem/src/Makefile.am | 3 +-
gschem/src/gschem_dialog.c | 392 ++++++++++++++++++++++++++++++++++++++++
gschem/src/x_attribedit.c | 18 +-
gschem/src/x_autonumber.c | 18 +-
gschem/src/x_compselect.c | 7 +-
gschem/src/x_dialog.c | 261 ++++++++++++++-------------
gschem/src/x_log.c | 6 +-
gschem/src/x_multiattrib.c | 47 ++---
gschem/src/x_pagesel.c | 45 +++--
gschem/src/x_print.c | 20 ++-
17 files changed, 688 insertions(+), 213 deletions(-)
create mode 100644 gschem/include/gschem_dialog.h
create mode 100644 gschem/src/gschem_dialog.c
diff --git a/gschem/include/Makefile.am b/gschem/include/Makefile.am
index b27904e..2ffb9bc 100644
--- a/gschem/include/Makefile.am
+++ b/gschem/include/Makefile.am
@@ -6,7 +6,8 @@ noinst_HEADERS = \
globals.h i_vars.h prototype.h x_dialog.h x_event.h x_states.h \
gettext.h \
x_compselect.h \
- x_log.h x_multiattrib.h x_pagesel.h x_print.h x_preview.h
+ x_log.h x_multiattrib.h x_pagesel.h x_print.h x_preview.h \
+ gschem_dialog.h
MOSTLYCLEANFILES = *.log core FILE *~
CLEANFILES = *.log core FILE *~
diff --git a/gschem/include/gschem_dialog.h b/gschem/include/gschem_dialog.h
new file mode 100644
index 0000000..38f036f
--- /dev/null
+++ b/gschem/include/gschem_dialog.h
@@ -0,0 +1,55 @@
+/* gEDA - GPL Electronic Design Automation
+ * gschem - gEDA Schematic Capture
+ * Copyright (C) 1998-2004 Ales V. Hvezda
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifndef __GSCHEM_DIALOG_H__
+#define __GSCHEM_DIALOG_H__
+
+
+#define GSCHEM_TYPE_DIALOG (gschem_dialog_get_type())
+#define GSCHEM_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSCHEM_TYPE_DIALOG, GschemDialog))
+#define GSCHEM_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSCHEM_TYPE_DIALOG, GschemDialogClass))
+#define GSCHEM_IS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSCHEM_TYPE_DIALOG))
+#define GSCHEM_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSCHEM_TYPE_DIALOG, GschemDialogClass))
+
+typedef struct _GschemDialogClass GschemDialogClass;
+typedef struct _GschemDialog GschemDialog;
+
+
+struct _GschemDialogClass {
+ GtkDialogClass parent_class;
+
+};
+
+struct _GschemDialog {
+ GtkDialog parent_instance;
+
+ gchar *settings_name;
+ TOPLEVEL *toplevel;
+};
+
+
+GType gschem_dialog_get_type (void);
+
+GtkWidget* gschem_dialog_new_with_buttons (const gchar *title, GtkWindow *parent, GtkDialogFlags flags,
+ const gchar *settings_name, TOPLEVEL *toplevel,
+ const gchar *first_button_text, ...);
+
+
+#endif /* __GSCHEM_DIALOG_H__ */
diff --git a/gschem/include/x_compselect.h b/gschem/include/x_compselect.h
index ead1ea7..18d718f 100644
--- a/gschem/include/x_compselect.h
+++ b/gschem/include/x_compselect.h
@@ -52,17 +52,15 @@ typedef struct _Compselect Compselect;
struct _CompselectClass {
- GtkDialogClass parent_class;
+ GschemDialogClass parent_class;
guint behavior_changed_signal_id;
};
struct _Compselect {
- GtkDialog parent_instance;
+ GschemDialog parent_instance;
- TOPLEVEL *toplevel;
-
GtkTreeView *treeview;
Preview *preview;
GtkEntry *entry_filter;
diff --git a/gschem/include/x_log.h b/gschem/include/x_log.h
index 17081a1..e5fa5de 100644
--- a/gschem/include/x_log.h
+++ b/gschem/include/x_log.h
@@ -35,11 +35,11 @@ typedef struct _Log Log;
struct _LogClass {
- GtkDialogClass parent_class;
+ GschemDialogClass parent_class;
};
struct _Log {
- GtkDialog parent_instance;
+ GschemDialog parent_instance;
GtkTextView *textview;
diff --git a/gschem/include/x_multiattrib.h b/gschem/include/x_multiattrib.h
index 4a78862..5b0565c 100644
--- a/gschem/include/x_multiattrib.h
+++ b/gschem/include/x_multiattrib.h
@@ -42,14 +42,14 @@ typedef struct _Multiattrib Multiattrib;
struct _MultiattribClass {
- GtkDialogClass parent_class;
+ GschemDialogClass parent_class;
};
struct _Multiattrib {
- GtkDialog parent_instance;
+ GschemDialog parent_instance;
- TOPLEVEL *toplevel;
+// TOPLEVEL *toplevel;
OBJECT *object;
GtkTreeView *treeview;
diff --git a/gschem/include/x_pagesel.h b/gschem/include/x_pagesel.h
index 2efe5a8..7bf76f4 100644
--- a/gschem/include/x_pagesel.h
+++ b/gschem/include/x_pagesel.h
@@ -36,13 +36,13 @@ typedef struct _Pagesel Pagesel;
struct _PageselClass {
- GtkDialogClass parent_class;
+ GschemDialogClass parent_class;
};
struct _Pagesel {
- GtkDialog parent_instance;
+ GschemDialog parent_instance;
- TOPLEVEL *toplevel;
+// TOPLEVEL *toplevel;
GtkTreeView *treeview;
diff --git a/gschem/include/x_print.h b/gschem/include/x_print.h
index 0b5914a..c3505e4 100644
--- a/gschem/include/x_print.h
+++ b/gschem/include/x_print.h
@@ -35,12 +35,12 @@ typedef struct _PrintDialog PrintDialog;
struct _PrintDialogClass
{
- GtkDialogClass parent_class;
+ GschemDialogClass parent_class;
};
struct _PrintDialog
{
- GtkDialog parent_instance;
+ GschemDialog parent_instance;
GtkEntry *fnfield, *cmdfield;
GtkRadioButton *fileradio, *cmdradio;
diff --git a/gschem/src/Makefile.am b/gschem/src/Makefile.am
index 012015a..f99ee92 100644
--- a/gschem/src/Makefile.am
+++ b/gschem/src/Makefile.am
@@ -22,7 +22,8 @@ gschem_SOURCES = \
x_pagesel.c x_print.c x_window.c x_stroke.c x_image.c x_color.c \
x_compselect.c x_fileselect.c x_preview.c x_attribedit.c \
x_multiattrib.c \
- parsecmd.c o_cue.c
+ parsecmd.c o_cue.c \
+ gschem_dialog.c
if CCISGCC
AM_CFLAGS = -Wall
diff --git a/gschem/src/gschem_dialog.c b/gschem/src/gschem_dialog.c
new file mode 100644
index 0000000..1423486
--- /dev/null
+++ b/gschem/src/gschem_dialog.c
@@ -0,0 +1,392 @@
+/* gEDA - GPL Electronic Design Automation
+ * gschem - gEDA Schematic Capture
+ * Copyright (C) 1998-2000 Ales V. Hvezda
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <glib/gstdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_DIRENT_H
+#include <dirent.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <libgeda/libgeda.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "../include/globals.h"
+#include "../include/prototype.h"
+
+#ifdef HAVE_LIBDMALLOC
+#include <dmalloc.h>
+#endif
+
+#include "../include/gschem_dialog.h"
+
+
+#if !GLIB_CHECK_VERSION(2,6,0)
+
+static inline void save_geometry (GschemDialog *dialog) { }
+static inline void restore_geometry (GschemDialog *dialog) { }
+
+#else
+
+static GKeyFile *dialog_geometry = NULL;
+
+#define DIALOG_GEOMETRY_STORE "gschem-dialog-geometry"
+
+static void save_geometry_to_file()
+{
+ gchar *data, *file;
+
+ g_assert( dialog_geometry != NULL );
+
+ data = g_key_file_to_data(dialog_geometry, NULL, NULL);
+ file = g_build_filename(g_get_home_dir (), ".gEDA", DIALOG_GEOMETRY_STORE,
+ NULL);
+ g_file_set_contents(file, data, -1, NULL);
+ g_free(data);
+ g_free(file);
+}
+
+/*! \brief Save dialog's current position and size.
+ *
+ * The dialog is referenced by its unique name which is set by a
+ * call like:
+ *
+ * gtk_object_set_data(GTK_OBJECT(dialog), "dialog-name",
+ * "text-find");
+ */
+static void save_geometry (GschemDialog *dialog)
+{
+ gint x, y, width, height;
+ gchar *name;
+
+ name = dialog->settings_name;
+ if (name == NULL) return;
+
+ g_assert( dialog_geometry != NULL );
+
+ gtk_window_get_position (GTK_WINDOW (dialog), &x, &y);
+ gtk_window_get_size (GTK_WINDOW (dialog), &width, &height);
+
+ g_key_file_set_integer (dialog_geometry, name, "x", x);
+ g_key_file_set_integer (dialog_geometry, name, "y", y);
+ g_key_file_set_integer (dialog_geometry, name, "width", width );
+ g_key_file_set_integer (dialog_geometry, name, "height", height);
+}
+
+
+/*! \brief Restore dialog's last position and size.
+ *
+ * If the dialog is unknown, do nothing.
+ */
+static void restore_geometry (GschemDialog *dialog)
+{
+ gchar *name;
+ gint x, y, width, height;
+
+ name = dialog->settings_name;
+ if (name == NULL) return;
+
+ if (!dialog_geometry) {
+ gchar *file = g_build_filename (g_get_home_dir (), ".gEDA",
+ DIALOG_GEOMETRY_STORE, NULL);
+
+ dialog_geometry = g_key_file_new();
+
+ /* Remember to save data on program exit */
+ atexit(save_geometry_to_file);
+
+ if (!g_file_test (file, G_FILE_TEST_EXISTS)) {
+ gchar *dir = g_build_filename (g_get_home_dir (), ".gEDA", NULL);
+ g_mkdir (dir, S_IRWXU | S_IRWXG);
+ g_free (dir);
+
+ g_file_set_contents (file, "", -1, NULL);
+ }
+
+ if (!g_key_file_load_from_file (dialog_geometry, file, G_KEY_FILE_NONE, NULL)) {
+ /* error opening key file, create an empty one and try again */
+ g_file_set_contents (file, "", -1, NULL);
+ if ( !g_key_file_load_from_file (dialog_geometry, file, G_KEY_FILE_NONE, NULL)) {
+ g_free (file);
+ return;
+ }
+ }
+ g_free (file);
+ }
+
+ if (g_key_file_has_group (dialog_geometry, name)) {
+ x = g_key_file_get_integer (dialog_geometry, name, "x", NULL);
+ y = g_key_file_get_integer (dialog_geometry, name, "y", NULL);
+ width = g_key_file_get_integer (dialog_geometry, name, "width", NULL);
+ height = g_key_file_get_integer (dialog_geometry, name, "height", NULL);
+
+ gtk_window_move (GTK_WINDOW (dialog), x, y);
+ gtk_window_resize (GTK_WINDOW (dialog), width, height);
+ }
+}
+
+#endif /* !GLIB_CHECK_VERSION(2,6,0) */
+
+
+enum {
+ PROP_SETTINGS_NAME = 1,
+ PROP_TOPLEVEL
+};
+
+static GObjectClass *gschem_dialog_parent_class = NULL;
+
+
+#if 0
+/*! \brief
+ * \par Function Description
+ *
+ * \param [in] widget The dialog.
+ * \param [in] event The event structure for key pressed.
+ * \param [in] user_data NULL.
+ * \returns FALSE to allow other handlers to be called.
+ */
+#endif
+
+
+static void map_handler (GtkWidget *widget)
+{
+ GschemDialog *dialog = GSCHEM_DIALOG( widget );
+
+ gtk_window_set_keep_below(GTK_WINDOW(widget), TRUE);
+
+ /* Let GTK map the window first */
+ GTK_WIDGET_CLASS (gschem_dialog_parent_class)->map (widget);
+ restore_geometry (dialog);
+ gtk_window_set_keep_below(GTK_WINDOW(widget), FALSE);
+}
+
+
+static void unmap_handler (GtkWidget *widget)
+{
+ GschemDialog *dialog = GSCHEM_DIALOG (widget);
+
+ save_geometry (dialog);
+
+ /* Let GTK unmap the window */
+ GTK_WIDGET_CLASS (gschem_dialog_parent_class)->unmap (widget);
+}
+
+
+static void gschem_dialog_finalize (GObject *object)
+{
+ GschemDialog *dialog = GSCHEM_DIALOG (object);
+
+ if (dialog->settings_name) g_free (dialog->settings_name);
+
+ G_OBJECT_CLASS (gschem_dialog_parent_class)->finalize (object);
+}
+
+
+static void gschem_dialog_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
+{
+ GschemDialog *dialog = GSCHEM_DIALOG (object);
+
+ switch(property_id) {
+ case PROP_SETTINGS_NAME:
+ if (dialog->settings_name) g_free (dialog->settings_name);
+ dialog->settings_name = g_strdup (g_value_get_string (value));
+ break;
+ case PROP_TOPLEVEL:
+ dialog->toplevel = (TOPLEVEL*)g_value_get_pointer (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+
+}
+
+
+static void gschem_dialog_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
+{
+ GschemDialog *dialog = GSCHEM_DIALOG (object);
+
+ switch(property_id) {
+ case PROP_SETTINGS_NAME:
+ g_value_set_string (value, dialog->settings_name);
+ break;
+ case PROP_TOPLEVEL:
+ g_value_set_pointer (value, (gpointer)dialog->toplevel);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+
+}
+
+
+static void gschem_dialog_init (GschemDialog *dialog)
+{
+}
+
+
+static void gschem_dialog_class_init (GschemDialogClass *klass)
+{
+ GtkWidgetClass *gtkwidget_class = GTK_WIDGET_CLASS (klass);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gschem_dialog_parent_class = g_type_class_peek_parent (klass);
+
+ gtkwidget_class->map = map_handler;
+ gtkwidget_class->unmap = unmap_handler;
+
+ gobject_class->finalize = gschem_dialog_finalize;
+ gobject_class->set_property = gschem_dialog_set_property;
+ gobject_class->get_property = gschem_dialog_get_property;
+
+ g_object_class_install_property (
+ gobject_class, PROP_SETTINGS_NAME,
+ g_param_spec_string ("settings-name",
+ "",
+ "",
+ NULL,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+ g_object_class_install_property (
+ gobject_class, PROP_TOPLEVEL,
+ g_param_spec_pointer ("toplevel",
+ "",
+ "",
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+}
+
+
+GType gschem_dialog_get_type ()
+{
+ static GType gschem_dialog_type = 0;
+
+ if (!gschem_dialog_type) {
+ static const GTypeInfo gschem_dialog_info = {
+ sizeof(GschemDialogClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) gschem_dialog_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof(GschemDialog),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) gschem_dialog_init,
+ };
+
+ gschem_dialog_type = g_type_register_static (GTK_TYPE_DIALOG,
+ "GschemDialog",
+ &gschem_dialog_info, 0);
+ }
+
+ return gschem_dialog_type;
+}
+
+/* Modified from GTK+-2.4.14 gtkdialog.c */
+static void gschem_dialog_add_buttons_valist (GtkDialog *dialog,
+ const gchar *first_button_text,
+ va_list args)
+{
+ const gchar* text;
+ gint response_id;
+
+ g_return_if_fail (GTK_IS_DIALOG (dialog));
+
+ if (first_button_text == NULL)
+ return;
+
+ text = first_button_text;
+ response_id = va_arg (args, gint);
+
+ while (text != NULL)
+ {
+ gtk_dialog_add_button (dialog, text, response_id);
+
+ text = va_arg (args, gchar*);
+ if (text == NULL)
+ break;
+ response_id = va_arg (args, int);
+ }
+}
+
+/* Modified from GTK+-2.4.14 gtkdialog.c */
+static GtkWidget* gschem_dialog_new_empty (const gchar *title,
+ GtkWindow *parent,
+ GtkDialogFlags flags,
+ const gchar *settings_name,
+ TOPLEVEL *toplevel)
+{
+ GschemDialog *dialog;
+
+ dialog = g_object_new (GSCHEM_TYPE_DIALOG,
+ "settings-name", settings_name,
+ "toplevel", toplevel,
+ NULL);
+
+ if (title)
+ gtk_window_set_title (GTK_WINDOW (dialog), title);
+
+ if (parent)
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+
+ if (flags & GTK_DIALOG_MODAL)
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+
+ if (flags & GTK_DIALOG_DESTROY_WITH_PARENT)
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
+
+ if (flags & GTK_DIALOG_NO_SEPARATOR)
+ gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+
+ return GTK_WIDGET (dialog);
+}
+
+
+/* Modified from GTK+-2.4.14 gtkdialog.c */
+GtkWidget* gschem_dialog_new_with_buttons (const gchar *title, GtkWindow *parent, GtkDialogFlags flags,
+ const gchar *settings_name, TOPLEVEL *toplevel,
+ const gchar *first_button_text, ...)
+{
+ GschemDialog *dialog;
+ va_list args;
+
+ dialog = GSCHEM_DIALOG (gschem_dialog_new_empty (title, parent, flags, settings_name, toplevel));
+
+ va_start (args, first_button_text);
+
+ gschem_dialog_add_buttons_valist (GTK_DIALOG (dialog),
+ first_button_text,
+ args);
+
+ va_end (args);
+
+ return GTK_WIDGET (dialog);
+}
+
diff --git a/gschem/src/x_attribedit.c b/gschem/src/x_attribedit.c
index 08975a6..6dd541f 100644
--- a/gschem/src/x_attribedit.c
+++ b/gschem/src/x_attribedit.c
@@ -33,6 +33,7 @@
#include "../include/i_vars.h"
#include "../include/globals.h"
#include "../include/prototype.h"
+#include "../include/gschem_dialog.h"
#include "../include/x_dialog.h"
#ifdef HAVE_LIBDMALLOC
@@ -322,14 +323,15 @@ void attrib_edit_dialog(TOPLEVEL * w_current, OBJECT * list, int flag)
}
}
- aewindow = gtk_dialog_new_with_buttons(_("Single Attribute Editor"),
- GTK_WINDOW(w_current->main_window),
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_APPLY,
- NULL);
+ aewindow = gschem_dialog_new_with_buttons(_("Single Attribute Editor"),
+ GTK_WINDOW(w_current->main_window),
+ GTK_DIALOG_MODAL,
+ "singleattrib", w_current,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_APPLY,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
gtk_dialog_set_alternative_button_order(GTK_DIALOG(aewindow),
diff --git a/gschem/src/x_autonumber.c b/gschem/src/x_autonumber.c
index a520db6..4a94f67 100644
--- a/gschem/src/x_autonumber.c
+++ b/gschem/src/x_autonumber.c
@@ -34,6 +34,7 @@
#include "../include/i_vars.h"
#include "../include/globals.h"
#include "../include/prototype.h"
+#include "../include/gschem_dialog.h"
#include "../include/x_dialog.h"
#ifdef HAVE_LIBDMALLOC
@@ -1216,14 +1217,15 @@ GtkWidget* autonumber_create_dialog(TOPLEVEL *w_current)
GtkWidget *label3;
- autonumber_text = gtk_dialog_new_with_buttons(_("Autonumber text"),
- GTK_WINDOW(w_current->main_window),
- 0, /* not modal */
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_APPLY,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ autonumber_text = gschem_dialog_new_with_buttons(_("Autonumber text"),
+ GTK_WINDOW(w_current->main_window),
+ 0, /* not modal */
+ "autonumber", w_current,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_APPLY,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
gtk_dialog_set_alternative_button_order(GTK_DIALOG(autonumber_text),
diff --git a/gschem/src/x_compselect.c b/gschem/src/x_compselect.c
index 5f6e1b8..7ac33fd 100644
--- a/gschem/src/x_compselect.c
+++ b/gschem/src/x_compselect.c
@@ -46,8 +46,8 @@
#include <dmalloc.h>
#endif
+#include "../include/gschem_dialog.h"
#include "../include/x_preview.h"
-
#include "../include/x_compselect.h"
/*! \def COMPSELECT_FILTER_INTERVAL
@@ -197,6 +197,9 @@ x_compselect_open (TOPLEVEL *toplevel)
if (toplevel->cswindow == NULL) {
toplevel->cswindow = GTK_WIDGET (
g_object_new (TYPE_COMPSELECT,
+ /* GschemDialog */
+ "settings-name", "compselect",
+ "toplevel", toplevel,
NULL));
g_signal_connect (toplevel->cswindow,
@@ -643,7 +646,7 @@ compselect_get_type ()
(GInstanceInitFunc) compselect_init,
};
- compselect_type = g_type_register_static (GTK_TYPE_DIALOG,
+ compselect_type = g_type_register_static (GSCHEM_TYPE_DIALOG,
"Compselect",
&compselect_info, 0);
}
diff --git a/gschem/src/x_dialog.c b/gschem/src/x_dialog.c
index 4fa4c79..862072d 100644
--- a/gschem/src/x_dialog.c
+++ b/gschem/src/x_dialog.c
@@ -33,6 +33,7 @@
#include "../include/globals.h"
#include "../include/prototype.h"
#include "../include/x_dialog.h"
+#include "../include/gschem_dialog.h"
#ifdef HAVE_LIBDMALLOC
#include <dmalloc.h>
@@ -179,14 +180,15 @@ void text_input_dialog (TOPLEVEL *w_current)
int real_tab_width;
if (!w_current->tiwindow) { /* dialog not created yet */
- w_current->tiwindow = gtk_dialog_new_with_buttons(_("Text Entry..."),
- GTK_WINDOW(w_current->main_window),
- 0, /* NON_MODAL */
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_APPLY,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->tiwindow = gschem_dialog_new_with_buttons(_("Text Entry..."),
+ GTK_WINDOW(w_current->main_window),
+ 0, /* NON_MODAL */
+ "text-entry", w_current,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_APPLY,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -503,14 +505,15 @@ void text_edit_dialog (TOPLEVEL *w_current, char *string, int text_size,
int select_index=0;
if (!w_current->tewindow) {
- w_current->tewindow = gtk_dialog_new_with_buttons(_("Edit Text Properties"),
- GTK_WINDOW(w_current->main_window),
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->tewindow = gschem_dialog_new_with_buttons(_("Edit Text Properties"),
+ GTK_WINDOW(w_current->main_window),
+ GTK_DIALOG_MODAL,
+ "text-edit", w_current,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -867,14 +870,15 @@ void line_type_dialog (TOPLEVEL *w_current, GList *objects)
line_type_data = (struct line_type_data*) g_malloc (
sizeof (struct line_type_data));
- dialog = gtk_dialog_new_with_buttons(_("Edit Line Width & Type"),
- GTK_WINDOW(w_current->main_window),
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ dialog = gschem_dialog_new_with_buttons(_("Edit Line Width & Type"),
+ GTK_WINDOW(w_current->main_window),
+ GTK_DIALOG_MODAL,
+ "line-type", w_current,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -1253,14 +1257,15 @@ void fill_type_dialog(TOPLEVEL *w_current, GList *objects)
fill_type_data = (struct fill_type_data*) g_malloc (
sizeof (struct fill_type_data));
- dialog = gtk_dialog_new_with_buttons(_("Edit Fill Type"),
- GTK_WINDOW(w_current->main_window),
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ dialog = gschem_dialog_new_with_buttons(_("Edit Fill Type"),
+ GTK_WINDOW(w_current->main_window),
+ GTK_DIALOG_MODAL,
+ "fill-type", w_current,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -1474,14 +1479,15 @@ void arc_angle_dialog (TOPLEVEL *w_current)
GtkWidget *spin_start, *spin_sweep;
if (!w_current->aawindow) {
- w_current->aawindow = gtk_dialog_new_with_buttons(_("Arc Params"),
- GTK_WINDOW(w_current->main_window),
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->aawindow = gschem_dialog_new_with_buttons(_("Arc Params"),
+ GTK_WINDOW(w_current->main_window),
+ GTK_DIALOG_MODAL,
+ "arc-angle", w_current,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -1594,14 +1600,15 @@ void translate_dialog (TOPLEVEL *w_current)
GtkWidget *vbox;
if (!w_current->trwindow) {
- w_current->trwindow = gtk_dialog_new_with_buttons(_("Translate"),
- GTK_WINDOW(w_current->main_window),
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->trwindow = gschem_dialog_new_with_buttons(_("Translate"),
+ GTK_WINDOW(w_current->main_window),
+ GTK_DIALOG_MODAL,
+ "translate", w_current,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -1693,14 +1700,15 @@ void text_size_dialog (TOPLEVEL *w_current)
GtkWidget *spin_size;
if (!w_current->tswindow) {
- w_current->tswindow = gtk_dialog_new_with_buttons(_("Text Size"),
- GTK_WINDOW(w_current->main_window),
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->tswindow = gschem_dialog_new_with_buttons(_("Text Size"),
+ GTK_WINDOW(w_current->main_window),
+ GTK_DIALOG_MODAL,
+ "text-size", w_current,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -1799,14 +1807,15 @@ void snap_size_dialog (TOPLEVEL *w_current)
GtkWidget *spin_size;
if (!w_current->tswindow) {
- w_current->tswindow = gtk_dialog_new_with_buttons(_("Snap Size"),
- GTK_WINDOW(w_current->main_window),
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->tswindow = gschem_dialog_new_with_buttons(_("Snap Size"),
+ GTK_WINDOW(w_current->main_window),
+ GTK_DIALOG_MODAL,
+ "snap-size", w_current,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -1903,14 +1912,15 @@ void slot_edit_dialog (TOPLEVEL *w_current, char *string)
GtkWidget *vbox;
if (!w_current->sewindow) {
- w_current->sewindow = gtk_dialog_new_with_buttons(_("Edit slot number"),
- GTK_WINDOW(w_current->main_window),
- GTK_DIALOG_MODAL,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_OK,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->sewindow = gschem_dialog_new_with_buttons(_("Edit slot number"),
+ GTK_WINDOW(w_current->main_window),
+ GTK_DIALOG_MODAL,
+ "slot-edit", w_current,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -1997,12 +2007,13 @@ void about_dialog (TOPLEVEL *w_current)
char *string;
if (!w_current->abwindow) {
- w_current->abwindow = gtk_dialog_new_with_buttons(_("About..."),
- GTK_WINDOW(w_current->main_window),
- GTK_DIALOG_MODAL,
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_REJECT,
- NULL);
+ w_current->abwindow = gschem_dialog_new_with_buttons(_("About..."),
+ GTK_WINDOW(w_current->main_window),
+ GTK_DIALOG_MODAL,
+ "about", w_current,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_REJECT,
+ NULL);
gtk_window_position (GTK_WINDOW (w_current->abwindow),
GTK_WIN_POS_MOUSE);
@@ -2090,12 +2101,13 @@ void coord_dialog (TOPLEVEL *w_current, int x, int y)
GtkWidget *vbox;
if (!w_current->cowindow) {
- w_current->cowindow = gtk_dialog_new_with_buttons(_("Coords"),
- GTK_WINDOW(w_current->main_window),
- 0, /* Not modal GTK_DIALOG_MODAL */
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_REJECT,
- NULL);
+ w_current->cowindow = gschem_dialog_new_with_buttons(_("Coords"),
+ GTK_WINDOW(w_current->main_window),
+ 0, /* Not modal GTK_DIALOG_MODAL */
+ "coord", w_current,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_REJECT,
+ NULL);
gtk_window_position (GTK_WINDOW (w_current->cowindow),
GTK_WIN_POS_NONE);
@@ -2405,14 +2417,15 @@ void color_edit_dialog (TOPLEVEL *w_current)
int select_index = 0;
if (!w_current->clwindow) {
- w_current->clwindow = gtk_dialog_new_with_buttons(_("Color Edit"),
- GTK_WINDOW(w_current->main_window),
- 0, /* nonmodal dialog */
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_APPLY,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->clwindow = gschem_dialog_new_with_buttons(_("Color Edit"),
+ GTK_WINDOW(w_current->main_window),
+ 0, /* nonmodal dialog */
+ "color-edit", w_current,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_APPLY,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -2498,12 +2511,13 @@ void x_dialog_hotkeys (TOPLEVEL *w_current)
};
if (!w_current->hkwindow) {
- w_current->hkwindow = gtk_dialog_new_with_buttons(_("Hotkeys"),
- GTK_WINDOW(w_current->main_window),
- 0, /* not modal */
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_REJECT,
- NULL);
+ w_current->hkwindow = gschem_dialog_new_with_buttons(_("Hotkeys"),
+ GTK_WINDOW(w_current->main_window),
+ 0, /* not modal */
+ "hotkeys", w_current,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_REJECT,
+ NULL);
gtk_window_position (GTK_WINDOW (w_current->hkwindow),
GTK_WIN_POS_NONE);
@@ -2922,14 +2936,15 @@ void find_text_dialog(TOPLEVEL * w_current)
}
if (!w_current->tfindwindow) {
- w_current->tfindwindow = gtk_dialog_new_with_buttons(_("Find Text"),
- GTK_WINDOW(w_current->main_window),
- 0, /* not modal GTK_DIALOG_MODAL */
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_FIND,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->tfindwindow = gschem_dialog_new_with_buttons(_("Find Text"),
+ GTK_WINDOW(w_current->main_window),
+ 0, /* not modal GTK_DIALOG_MODAL */
+ "find-text", w_current,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_FIND,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -3028,14 +3043,15 @@ void hide_text_dialog(TOPLEVEL * w_current)
GtkWidget *vbox;
if (!w_current->thidewindow) {
- w_current->thidewindow = gtk_dialog_new_with_buttons(_("Hide Text"),
- GTK_WINDOW(w_current->main_window),
- 0, /* not modal GTK_DIALOG_MODAL, */
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_APPLY,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->thidewindow = gschem_dialog_new_with_buttons(_("Hide Text"),
+ GTK_WINDOW(w_current->main_window),
+ 0, /* not modal GTK_DIALOG_MODAL, */
+ "hide-text", w_current,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_APPLY,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
@@ -3128,14 +3144,15 @@ void show_text_dialog(TOPLEVEL * w_current)
GtkWidget *vbox;
if (!w_current->tshowwindow) {
- w_current->tshowwindow = gtk_dialog_new_with_buttons(_("Show Text"),
- GTK_WINDOW(w_current->main_window),
- 0, /* not modal GTK_DIALOG_MODAL, */
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_APPLY,
- GTK_RESPONSE_ACCEPT,
- NULL);
+ w_current->tshowwindow = gschem_dialog_new_with_buttons(_("Show Text"),
+ GTK_WINDOW(w_current->main_window),
+ 0, /* not modal GTK_DIALOG_MODAL, */
+ "show-text", w_current,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_APPLY,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
#if GTK_CHECK_VERSION (2,6,0)
/* Set the alternative button order (ok, cancel, help) for other systems */
diff --git a/gschem/src/x_log.c b/gschem/src/x_log.c
index fdee735..c230f64 100644
--- a/gschem/src/x_log.c
+++ b/gschem/src/x_log.c
@@ -43,6 +43,7 @@
#include <dmalloc.h>
#endif
+#include "../include/gschem_dialog.h"
#include "../include/x_log.h"
static void x_log_callback_response (GtkDialog *dialog,
@@ -62,6 +63,9 @@ void x_log_open ()
gchar *contents;
log_dialog = GTK_WIDGET (g_object_new (TYPE_LOG,
+ /* GschemDialog */
+ "settings-name", "log",
+ /* "toplevel", TOPEVEL * */
NULL));
g_signal_connect (log_dialog,
@@ -192,7 +196,7 @@ GType log_get_type ()
(GInstanceInitFunc) log_init,
};
- log_type = g_type_register_static (GTK_TYPE_DIALOG,
+ log_type = g_type_register_static (GSCHEM_TYPE_DIALOG,
"Log",
&log_info, 0);
}
diff --git a/gschem/src/x_multiattrib.c b/gschem/src/x_multiattrib.c
index 363dd59..974f9f4 100644
--- a/gschem/src/x_multiattrib.c
+++ b/gschem/src/x_multiattrib.c
@@ -37,6 +37,7 @@
#endif
#include <gdk/gdkkeysyms.h>
+#include "../include/gschem_dialog.h"
#include "../include/x_multiattrib.h"
/*! \brief Open multiple attribute editor dialog.
@@ -55,8 +56,10 @@ void x_multiattrib_open (TOPLEVEL *toplevel, OBJECT *object)
GtkWidget *dialog;
dialog = GTK_WIDGET (g_object_new (TYPE_MULTIATTRIB,
- "toplevel", toplevel,
"object", object,
+ /* GschemDialog */
+ "settings-name", "multiattrib",
+ "toplevel", toplevel,
NULL));
gtk_window_set_transient_for(GTK_WINDOW(dialog),
@@ -378,8 +381,7 @@ static void cellrenderermultilinetext_init(CellRendererMultiLineText *self)
enum {
- PROP_TOPLEVEL=1,
- PROP_OBJECT
+ PROP_OBJECT = 1
};
enum {
@@ -637,7 +639,7 @@ static void multiattrib_callback_edited_name(GtkCellRendererText *cellrendererte
gchar *name, *value, *newtext;
model = gtk_tree_view_get_model (multiattrib->treeview);
- toplevel = multiattrib->toplevel;
+ toplevel = GSCHEM_DIALOG (multiattrib)->toplevel;
if (!gtk_tree_model_get_iter_from_string (model, &iter, arg1)) {
return;
@@ -692,7 +694,7 @@ static void multiattrib_callback_edited_value(GtkCellRendererText *cell_renderer
gchar *name, *value, *newtext;
model = gtk_tree_view_get_model (multiattrib->treeview);
- toplevel = multiattrib->toplevel;
+ toplevel = GSCHEM_DIALOG (multiattrib)->toplevel;
if (!gtk_tree_model_get_iter_from_string (model, &iter, arg1)) {
return;
@@ -736,7 +738,7 @@ static void multiattrib_callback_toggled_visible(GtkCellRendererToggle *cell_ren
gint visibility;
model = gtk_tree_view_get_model (multiattrib->treeview);
- toplevel = multiattrib->toplevel;
+ toplevel = GSCHEM_DIALOG (multiattrib)->toplevel;
if (!gtk_tree_model_get_iter_from_string (model, &iter, path)) {
return;
@@ -778,7 +780,7 @@ static void multiattrib_callback_toggled_show_name(GtkCellRendererToggle *cell_r
gint new_snv;
model = gtk_tree_view_get_model (multiattrib->treeview);
- toplevel = multiattrib->toplevel;
+ toplevel = GSCHEM_DIALOG (multiattrib)->toplevel;
if (!gtk_tree_model_get_iter_from_string (model, &iter, path)) {
return;
@@ -827,7 +829,7 @@ static void multiattrib_callback_toggled_show_value(GtkCellRendererToggle *cell_
gint new_snv;
model = gtk_tree_view_get_model (multiattrib->treeview);
- toplevel = multiattrib->toplevel;
+ toplevel = GSCHEM_DIALOG (multiattrib)->toplevel;
if (!gtk_tree_model_get_iter_from_string (model, &iter, path)) {
return;
@@ -889,7 +891,7 @@ static gboolean multiattrib_callback_key_pressed(GtkWidget *widget,
-1);
g_assert (o_attrib->type == OBJ_TEXT);
- multiattrib_action_delete_attribute (multiattrib->toplevel,
+ multiattrib_action_delete_attribute (GSCHEM_DIALOG (multiattrib)->toplevel,
o_attrib);
/* update the treeview contents */
@@ -955,7 +957,7 @@ static void multiattrib_callback_popup_duplicate(GtkMenuItem *menuitem,
return;
}
- toplevel = multiattrib->toplevel;
+ toplevel = GSCHEM_DIALOG (multiattrib)->toplevel;
object = multiattrib->object;
gtk_tree_model_get (model, &iter,
@@ -991,8 +993,8 @@ static void multiattrib_callback_popup_delete(GtkMenuItem *menuitem,
return;
}
- toplevel = multiattrib->toplevel;
-
+ toplevel = GSCHEM_DIALOG (multiattrib)->toplevel;
+
gtk_tree_model_get (model, &iter,
COLUMN_ATTRIBUTE, &o_attrib,
-1);
@@ -1081,7 +1083,7 @@ static void multiattrib_callback_button_add(GtkButton *button,
gboolean visible;
gint shownv;
- toplevel = multiattrib->toplevel;
+ toplevel = GSCHEM_DIALOG (multiattrib)->toplevel;
object = multiattrib->object;
buffer = gtk_text_view_get_buffer (multiattrib->textview_value);
@@ -1251,7 +1253,7 @@ GType multiattrib_get_type()
(GInstanceInitFunc) multiattrib_init,
};
- multiattrib_type = g_type_register_static (GTK_TYPE_DIALOG,
+ multiattrib_type = g_type_register_static (GSCHEM_TYPE_DIALOG,
"Multiattrib",
&multiattrib_info, 0);
}
@@ -1272,12 +1274,6 @@ static void multiattrib_class_init(MultiattribClass *klass)
gobject_class->get_property = multiattrib_get_property;
g_object_class_install_property (
- gobject_class, PROP_TOPLEVEL,
- g_param_spec_pointer ("toplevel",
- "",
- "",
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
- g_object_class_install_property (
gobject_class, PROP_OBJECT,
g_param_spec_pointer ("object",
"",
@@ -1317,7 +1313,6 @@ static void multiattrib_init(Multiattrib *multiattrib)
"has-separator", TRUE,
NULL);
- multiattrib->toplevel = NULL;
multiattrib->object = NULL;
/* connect to the key-press-event of dialog */
@@ -1608,9 +1603,6 @@ static void multiattrib_set_property (GObject *object,
Multiattrib *multiattrib = MULTIATTRIB (object);
switch(property_id) {
- case PROP_TOPLEVEL:
- multiattrib->toplevel = (TOPLEVEL*)g_value_get_pointer (value);
- break;
case PROP_OBJECT:
multiattrib->object = (OBJECT*)g_value_get_pointer (value);
multiattrib_update (multiattrib);
@@ -1634,9 +1626,6 @@ static void multiattrib_get_property (GObject *object,
Multiattrib *multiattrib = MULTIATTRIB (object);
switch(property_id) {
- case PROP_TOPLEVEL:
- g_value_set_pointer (value, (gpointer)multiattrib->toplevel);
- break;
case PROP_OBJECT:
g_value_set_pointer (value, (gpointer)multiattrib->object);
break;
@@ -1658,7 +1647,7 @@ void multiattrib_update (Multiattrib *multiattrib)
OBJECT **object_attribs, *o_current;
gint i;
- if (multiattrib->toplevel == NULL ||
+ if (GSCHEM_DIALOG (multiattrib)->toplevel == NULL ||
multiattrib->object == NULL) {
/* we can not do anything until both toplevel and object are set */
return;
@@ -1671,7 +1660,7 @@ void multiattrib_update (Multiattrib *multiattrib)
/* get list of attributes */
object_attribs = o_attrib_return_attribs (
- multiattrib->toplevel->page_current->object_head,
+ GSCHEM_DIALOG (multiattrib)->toplevel->page_current->object_head,
multiattrib->object);
/* populate the store with attributes */
if (object_attribs) {
diff --git a/gschem/src/x_pagesel.c b/gschem/src/x_pagesel.c
index a50caa0..a539e2c 100644
--- a/gschem/src/x_pagesel.c
+++ b/gschem/src/x_pagesel.c
@@ -35,6 +35,7 @@
#include <dmalloc.h>
#endif
+#include "../include/gschem_dialog.h"
#include "../include/x_pagesel.h"
@@ -55,7 +56,9 @@ void x_pagesel_open (TOPLEVEL *toplevel)
{
if (toplevel->pswindow == NULL) {
toplevel->pswindow = GTK_WIDGET (g_object_new (TYPE_PAGESEL,
- "toplevel", toplevel,
+ /* GschemDialog */
+ "settings-name", "pagesel",
+ "toplevel", toplevel,
NULL));
g_signal_connect (toplevel->pswindow,
@@ -132,9 +135,11 @@ static void x_pagesel_callback_response (GtkDialog *dialog,
}
+#if 0
enum {
PROP_TOPLEVEL=1
};
+#endif
enum {
COLUMN_PAGE,
@@ -176,7 +181,7 @@ static void pagesel_callback_selection_changed (GtkTreeSelection *selection,
return;
}
- toplevel = pagesel->toplevel;
+ toplevel = GSCHEM_DIALOG (pagesel)->toplevel;
gtk_tree_model_get (model, &iter,
COLUMN_PAGE, &page,
-1);
@@ -234,7 +239,7 @@ static void \
pagesel_callback_popup_ ## name (GtkMenuItem *menuitem, \
gpointer user_data) \
{ \
- i_callback_ ## action (PAGESEL (user_data)->toplevel, 0, NULL); \
+ i_callback_ ## action (GSCHEM_DIALOG (user_data)->toplevel, 0, NULL); \
}
DEFINE_POPUP_CALLBACK (new_page, file_new)
@@ -330,7 +335,7 @@ GType pagesel_get_type()
(GInstanceInitFunc) pagesel_init,
};
- pagesel_type = g_type_register_static (GTK_TYPE_DIALOG,
+ pagesel_type = g_type_register_static (GSCHEM_TYPE_DIALOG,
"Pagesel",
&pagesel_info, 0);
}
@@ -350,13 +355,14 @@ static void pagesel_class_init (PageselClass *klass)
gobject_class->set_property = pagesel_set_property;
gobject_class->get_property = pagesel_get_property;
+#if 0
g_object_class_install_property (
gobject_class, PROP_TOPLEVEL,
g_param_spec_pointer ("toplevel",
"",
"",
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
-
+#endif
}
/*! \todo Finish function documentation!!!
@@ -379,8 +385,8 @@ static void pagesel_init (Pagesel *pagesel)
/* GtkWindow */
"type", GTK_WINDOW_TOPLEVEL,
"title", _("Page Manager"),
- "default-height", 180,
- "default-width", 515,
+// "default-height", 180,
+// "default-width", 515,
"modal", FALSE,
"window-position", GTK_WIN_POS_NONE,
"type-hint", GDK_WINDOW_TYPE_HINT_NORMAL,
@@ -492,7 +498,8 @@ static void pagesel_init (Pagesel *pagesel)
-1);
#endif
-
+ // Strictly, this has the wrong prototype, but it doesn't matter
+ g_signal_connect( pagesel, "notify::toplevel", G_CALLBACK (pagesel_update), NULL );
}
/*! \todo Finish function documentation!!!
@@ -505,13 +512,13 @@ static void pagesel_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
- Pagesel *pagesel = PAGESEL (object);
+// Pagesel *pagesel = PAGESEL (object);
switch(property_id) {
- case PROP_TOPLEVEL:
- pagesel->toplevel = (TOPLEVEL*)g_value_get_pointer (value);
- pagesel_update (pagesel);
- break;
+// case PROP_TOPLEVEL:
+// pagesel->toplevel = (TOPLEVEL*)g_value_get_pointer (value);
+// pagesel_update (pagesel);
+// break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
@@ -528,12 +535,12 @@ static void pagesel_get_property (GObject *object,
GValue *value,
GParamSpec *pspec)
{
- Pagesel *pagesel = PAGESEL (object);
+// Pagesel *pagesel = PAGESEL (object);
switch(property_id) {
- case PROP_TOPLEVEL:
- g_value_set_pointer (value, (gpointer)pagesel->toplevel);
- break;
+// case PROP_TOPLEVEL:
+// g_value_set_pointer (value, (gpointer)pagesel->toplevel);
+// break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
@@ -628,9 +635,9 @@ void pagesel_update (Pagesel *pagesel)
g_assert (IS_PAGESEL (pagesel));
- g_return_if_fail (pagesel->toplevel);
+ g_return_if_fail (GSCHEM_DIALOG (pagesel)->toplevel);
- toplevel = pagesel->toplevel;
+ toplevel = GSCHEM_DIALOG (pagesel)->toplevel;
model = gtk_tree_view_get_model (pagesel->treeview);
/* wipe out every thing in the store */
diff --git a/gschem/src/x_print.c b/gschem/src/x_print.c
index 0a64694..9762c73 100644
--- a/gschem/src/x_print.c
+++ b/gschem/src/x_print.c
@@ -30,6 +30,7 @@
#include "../include/globals.h"
#include "../include/prototype.h"
+#include "../include/gschem_dialog.h"
#include "../include/x_print.h"
#ifdef HAVE_LIBDMALLOC
@@ -675,7 +676,7 @@ print_dialog_get_type ()
0, /* n_preallocs */
(GInstanceInitFunc) print_dialog_init,
};
- print_dialog_type = g_type_register_static (GTK_TYPE_DIALOG,
+ print_dialog_type = g_type_register_static (GSCHEM_TYPE_DIALOG,
"PrintDialog",
&print_dialog_info, 0);
}
@@ -729,13 +730,16 @@ x_print_setup (TOPLEVEL * w_current, char *filename)
/* Create a print dialog, find out whether the user clicks Print or
Cancel, and then print or return accordingly */
dialog = GTK_DIALOG (g_object_new (TYPE_PRINT_DIALOG,
- "command", command,
- "filename", filename,
- "papersize", paperidx,
- "orientation", orient,
- "type", type,
- "usefile", usefile,
- NULL));
+ "command", command,
+ "filename", filename,
+ "papersize", paperidx,
+ "orientation", orient,
+ "type", type,
+ "usefile", usefile,
+ /* GschemDialog */
+ "settings-name", "print",
+ "toplevel", w_current,
+ NULL));
gtk_widget_show_all (GTK_WIDGET (dialog));
gtk_dialog_set_default_response(GTK_DIALOG(dialog),
--
1.5.1
More information about the geda-dev
mailing list