[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r19951 - gnunet-gtk/src/fs
From: |
gnunet |
Subject: |
[GNUnet-SVN] r19951 - gnunet-gtk/src/fs |
Date: |
Wed, 22 Feb 2012 19:37:01 +0100 |
Author: grothoff
Date: 2012-02-22 19:37:01 +0100 (Wed, 22 Feb 2012)
New Revision: 19951
Modified:
gnunet-gtk/src/fs/gnunet-fs-gtk.c
Log:
LRN: Save-and-restore-window-position-and-size
Modified: gnunet-gtk/src/fs/gnunet-fs-gtk.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk.c 2012-02-22 18:35:30 UTC (rev 19950)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk.c 2012-02-22 18:37:01 UTC (rev 19951)
@@ -93,6 +93,55 @@
/**
+ * Obtains main window position and size before it's destroyed
+ * and saves these into user's config file.
+ *
+ * @param main_window main window widget
+ */
+static void
+main_window_save_position (GtkWidget *main_window)
+{
+ GdkWindow *main_window_gdk;
+
+ gint window_x, window_y, window_width, window_height, maximized;
+ GdkWindowState window_state;
+ struct GNUNET_CONFIGURATION_Handle *cfg;
+ struct GNUNET_CONFIGURATION_Handle *cfgDefault;
+ cfgDefault = GNUNET_CONFIGURATION_create ();
+ (void) GNUNET_CONFIGURATION_load (cfgDefault, NULL); /* load defaults only */
+
+ /* FIXME: is it safe to discard const qualifier? */
+ cfg = (struct GNUNET_CONFIGURATION_Handle *)
+ GNUNET_GTK_main_loop_get_configuration (ml);
+
+ main_window_gdk = gtk_widget_get_window (main_window);
+ maximized = GNUNET_YES;
+ if (NULL != main_window_gdk)
+ {
+ window_state = gdk_window_get_state (main_window_gdk);
+ if (!(window_state & GDK_WINDOW_STATE_MAXIMIZED))
+ maximized = GNUNET_NO;
+ }
+
+ gtk_window_get_position (GTK_WINDOW (main_window), &window_x, &window_y);
+ gtk_window_get_size (GTK_WINDOW (main_window), &window_width,
&window_height);
+
+ GNUNET_CONFIGURATION_set_value_number (cfg, "gnunet-gtk",
+ "MAIN_WINDOW_X", window_x);
+ GNUNET_CONFIGURATION_set_value_number (cfg, "gnunet-gtk",
+ "MAIN_WINDOW_Y", window_y);
+ GNUNET_CONFIGURATION_set_value_number (cfg, "gnunet-gtk",
+ "MAIN_WINDOW_WIDTH", window_width);
+ GNUNET_CONFIGURATION_set_value_number (cfg, "gnunet-gtk",
+ "MAIN_WINDOW_HEIGHT", window_height);
+ GNUNET_CONFIGURATION_set_value_string (cfg, "gnunet-gtk",
+ "MAIN_WINDOW_MAXIMIZED", maximized == GNUNET_YES ? "YES" : "NO");
+
+ GNUNET_CONFIGURATION_write_diffs (cfgDefault, cfg, "~/.gnunet/gnunet.conf");
+ GNUNET_CONFIGURATION_destroy (cfgDefault);
+}
+
+/**
* Task run on shutdown.
* FIXME-STYLE: does this need to be a separate task!?
*
@@ -120,6 +169,10 @@
void
GNUNET_GTK_quit_cb (GObject * object, gpointer user_data)
{
+ GtkWidget *main_window = GTK_WIDGET (object);
+
+ main_window_save_position (main_window);
+
GNUNET_GTK_tray_icon_destroy ();
GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE,
&shutdown_task, NULL);
@@ -138,6 +191,10 @@
{
GtkWidget *main_window;
GtkTreeView *metadata_tree;
+ unsigned long long dl_parallel, req_parallel, window_x, window_y,
+ window_width, window_height;
+ int maximized;
+ const struct GNUNET_CONFIGURATION_Handle *cfg;
ml = cls;
@@ -148,7 +205,37 @@
main_window =
GTK_WIDGET (GNUNET_FS_GTK_get_main_window_object
("GNUNET_GTK_main_window"));
- gtk_window_maximize (GTK_WINDOW (main_window));
+
+ cfg = GNUNET_GTK_main_loop_get_configuration (ml);
+
+ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+ "MAIN_WINDOW_X", &window_x))
+ window_x = ULONG_MAX;
+ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+ "MAIN_WINDOW_Y", &window_y))
+ window_y = ULONG_MAX;
+ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+ "MAIN_WINDOW_WIDTH", &window_width))
+ window_width = ULONG_MAX;
+ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+ "MAIN_WINDOW_HEIGHT", &window_height))
+ window_height = ULONG_MAX;
+ if (GNUNET_SYSERR == (maximized = GNUNET_CONFIGURATION_get_value_yesno (cfg,
+ "gnunet-gtk", "MAIN_WINDOW_MAXIMIZED")))
+ maximized = GNUNET_YES;
+
+ if (window_x == ULONG_MAX || window_y == ULONG_MAX ||
+ window_width == ULONG_MAX || window_height == ULONG_MAX ||
+ maximized == GNUNET_YES)
+ {
+ /* If anything is wrong - play safe and show it maximized */
+ gtk_window_maximize (GTK_WINDOW (main_window));
+ }
+ else
+ {
+ gtk_window_move (GTK_WINDOW (main_window), window_x, window_y);
+ gtk_window_resize (GTK_WINDOW (main_window), window_width, window_height);
+ }
/* Allow multiple selection in metadata view; */
/* FIXME-GTK3: this can be done within (modern versions of) glade */
@@ -161,12 +248,26 @@
GNUNET_GTK_tray_icon_create (GTK_WINDOW (main_window),
"gnunet-fs-gtk",
"gnunet-fs-gtk");
+
+ /* FIXME: should these '1's be here? Maybe better to put them into
+ * default config files?
+ */
+ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+ "MAX_PARALLEL_DOWNLOADS", &dl_parallel))
+ dl_parallel = 1;
+ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+ "MAX_PARALLEL_REQUESTS", &req_parallel))
+ req_parallel = 1;
+
/* initialize file-sharing */
- fs = GNUNET_FS_start (GNUNET_GTK_main_loop_get_configuration (ml),
- "gnunet-fs-gtk",
+ fs = GNUNET_FS_start (cfg, "gnunet-fs-gtk",
&GNUNET_GTK_fs_event_handler, NULL,
GNUNET_FS_FLAGS_NONE | GNUNET_FS_FLAGS_PERSISTENCE
/* | GNUNET_FS_FLAGS_DO_PROBES
*/ ,
+ GNUNET_FS_OPTIONS_DOWNLOAD_PARALLELISM,
+ (unsigned int) dl_parallel,
+ GNUNET_FS_OPTIONS_REQUEST_PARALLELISM,
+ (unsigned int) req_parallel,
GNUNET_FS_OPTIONS_END);
if (NULL == fs)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r19951 - gnunet-gtk/src/fs,
gnunet <=