From d0ef90e94e1715670463d2feefc540495c41138c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20L=C3=BCdecke?= Date: Sat, 17 Mar 2012 15:30:47 +0100 Subject: [PATCH] first try --- libanjuta/anjuta-preferences-dialog.c | 94 ++++++++++++++++++++++++++++++++- libanjuta/anjuta-preferences-dialog.h | 10 ++-- 2 files changed, 100 insertions(+), 4 deletions(-) diff --git a/libanjuta/anjuta-preferences-dialog.c b/libanjuta/anjuta-preferences-dialog.c index 2cf6cf1..99e832a 100644 --- a/libanjuta/anjuta-preferences-dialog.c +++ b/libanjuta/anjuta-preferences-dialog.c @@ -37,9 +37,9 @@ #include #include - #include #include +#include struct _AnjutaPreferencesDialogPrivate { GtkWidget *treeview; @@ -86,6 +86,27 @@ anjuta_preferences_dialog_class_init (AnjutaPreferencesDialogClass *class) } static void +on_session_save (AnjutaShell *shell, AnjutaSessionPhase phase, + AnjutaSession *session, AnjutaPreferencesDialog *dlg) +{ + /* Save geometry */ + gchar *geometry = anjuta_preferences_dialog_get_geometry (dlg); + if (geometry) + anjuta_session_set_string (session, "Anjuta", "Geometry", geometry); + g_free (geometry); +} + +static void +on_session_load (AnjutaShell *shell, AnjutaSessionPhase phase, + AnjutaSession *session, AnjutaPreferencesDialog *dlg) +{ + /* Restore geometry */ + gchar *geometry = anjuta_session_get_string (session, "Anjuta", "Geometry"); + anjuta_preferences_dialog_set_geometry (dlg, geometry); + g_free (geometry); +} + +static void add_category_columns (AnjutaPreferencesDialog *dlg) { GtkCellRenderer *renderer; @@ -225,6 +246,77 @@ anjuta_preferences_dialog_init (AnjutaPreferencesDialog *dlg) gtk_dialog_add_button (GTK_DIALOG (dlg), GTK_STOCK_CLOSE, -7); gtk_widget_show (hbox); + + //TODO: + /* Connect to session */ + g_signal_connect (G_OBJECT (dlg), "save_session", + G_CALLBACK (on_session_save), dlg); + g_signal_connect (G_OBJECT (dlg), "load_session", + G_CALLBACK (on_session_load), dlg); +} + +gchar* +anjuta_preferences_dialog_get_geometry (AnjutaPreferencesDialog *dlg) +{ + gchar *geometry; + gint width, height, posx, posy; + + g_return_val_if_fail (ANJUTA_IS_PREFERENCES_DIALOG (dlg), NULL); + + geometry = NULL; + width = height = posx = posy = 0; + if (gtk_widget_get_window (GTK_WIDGET (dlg))) + { + gtk_window_get_size (GTK_WINDOW (dlg), &width, &height); + gtk_window_get_position (GTK_WINDOW(dlg), &posx, &posy); + + geometry = g_strdup_printf ("%dx%d+%d+%d", width, height, posx, posy); + } + return geometry; +} + +void +anjuta_preferences_dialog_set_geometry (AnjutaPreferencesDialog *dlg, + const gchar *geometry) +{ + gint width, height, posx, posy; + gboolean geometry_set = FALSE; + + if (geometry && strlen (geometry) > 0) + { + if (sscanf (geometry, "%dx%d+%d+%d", &width, &height, + &posx, &posy) == 4) + { + if (gtk_widget_get_realized (GTK_WIDGET (dlg))) + { + gtk_window_resize (GTK_WINDOW (dlg), width, height); + } + else + { + gtk_window_set_default_size (GTK_WINDOW (dlg), width, height); + gtk_window_move (GTK_WINDOW (dlg), posx, posy); + } + geometry_set = TRUE; + } + else + { + g_warning ("Failed to parse geometry: %s", geometry); + } + } + if (!geometry_set) + { + posx = 10; + posy = 10; + width = gdk_screen_width () - 10; + height = gdk_screen_height () - 25; + width = (width < 790)? width : 790; + height = (height < 575)? width : 575; + if (gtk_widget_get_realized (GTK_WIDGET (dlg)) == FALSE) + { + gtk_window_set_default_size (GTK_WINDOW (dlg), width, height); + gtk_window_move (GTK_WINDOW (dlg), posx, posy); + } + } } /** diff --git a/libanjuta/anjuta-preferences-dialog.h b/libanjuta/anjuta-preferences-dialog.h index 1cdfc01..592f5e8 100644 --- a/libanjuta/anjuta-preferences-dialog.h +++ b/libanjuta/anjuta-preferences-dialog.h @@ -46,17 +46,21 @@ struct _AnjutaPreferencesDialogClass { GtkDialogClass parent; }; -GType anjuta_preferences_dialog_get_type (void); +GType anjuta_preferences_dialog_get_type (void); + +void anjuta_preferences_dialog_set_geometry (AnjutaPreferencesDialog *dlg, const gchar *geometry); + +gchar* anjuta_preferences_dialog_get_geometry (AnjutaPreferencesDialog *dlg); GtkWidget *anjuta_preferences_dialog_new (void); -void anjuta_preferences_dialog_add_page (AnjutaPreferencesDialog *dlg, +void anjuta_preferences_dialog_add_page (AnjutaPreferencesDialog *dlg, const gchar *name, const gchar *title, GdkPixbuf *icon, GtkWidget *page); -void anjuta_preferences_dialog_remove_page (AnjutaPreferencesDialog *dlg, +void anjuta_preferences_dialog_remove_page (AnjutaPreferencesDialog *dlg, const char *title); G_END_DECLS -- 1.7.9.4