diff options
author | Dave Camp <dave@ximian.com> | 2004-03-29 22:40:28 +0000 |
---|---|---|
committer | Dave Camp <campd@src.gnome.org> | 2004-03-29 22:40:28 +0000 |
commit | 4211fdc0ed8cd77cab2762ad9b57150082c43059 (patch) | |
tree | a48616ea353f13e5b9c55c0eda6395ec0ab6c199 /src | |
parent | 499cc0f899a91af029ca0b72cd0c692737972466 (diff) | |
download | nautilus-4211fdc0ed8cd77cab2762ad9b57150082c43059.tar.gz |
When opening a spatial window for the first time, place it over the parent
2004-03-29 Dave Camp <dave@ximian.com>
* src/nautilus-application.c:
(nautilus_application_present_spatial_window):
* src/nautilus-application.h:
* src/nautilus-shell.c: (open_window),
(restore_one_window_callback):
* src/nautilus-window-manage-views.c: (open_location): When
opening a spatial window for the first time, place it over the
parent window.
Diffstat (limited to 'src')
-rw-r--r-- | src/nautilus-application.c | 29 | ||||
-rw-r--r-- | src/nautilus-application.h | 2 | ||||
-rw-r--r-- | src/nautilus-shell.c | 6 | ||||
-rw-r--r-- | src/nautilus-window-manage-views.c | 2 |
4 files changed, 35 insertions, 4 deletions
diff --git a/src/nautilus-application.c b/src/nautilus-application.c index 246d38a05..f864d256b 100644 --- a/src/nautilus-application.c +++ b/src/nautilus-application.c @@ -57,6 +57,7 @@ #include <gdk/gdkx.h> #include <gtk/gtkinvisible.h> #include <gtk/gtksignal.h> +#include <gtk/gtkwindow.h> #include <libgnome/gnome-config.h> #include <libgnome/gnome-i18n.h> #include <libgnome/gnome-util.h> @@ -972,8 +973,9 @@ spatial_window_destroyed_callback (void *user_data, GObject *window) NautilusWindow * nautilus_application_present_spatial_window (NautilusApplication *application, - const char *location, - GdkScreen *screen) + NautilusWindow *requesting_window, + const char *location, + GdkScreen *screen) { NautilusWindow *window; GList *l; @@ -999,6 +1001,29 @@ nautilus_application_present_spatial_window (NautilusApplication *application, } window = create_window (application, NAUTILUS_TYPE_SPATIAL_WINDOW, screen); + if (requesting_window) { + /* Center the window over the requesting window by default */ + int orig_x, orig_y, orig_width, orig_height; + int new_x, new_y, new_width, new_height; + + gtk_window_get_position (GTK_WINDOW (requesting_window), + &orig_x, &orig_y); + gtk_window_get_size (GTK_WINDOW (requesting_window), + &orig_width, &orig_height); + gtk_window_get_default_size (GTK_WINDOW (window), + &new_width, &new_height); + + new_x = orig_x + (orig_width - new_width) / 2; + new_y = orig_y + (orig_height - new_height) / 2; + + if (orig_width - new_width < 10) { + new_x += 10; + new_y += 10; + } + + gtk_window_move (GTK_WINDOW (window), new_x, new_y); + } + nautilus_application_spatial_window_list = g_list_prepend (nautilus_application_spatial_window_list, window); g_object_weak_ref (G_OBJECT (window), spatial_window_destroyed_callback, NULL); diff --git a/src/nautilus-application.h b/src/nautilus-application.h index 84e16333e..cc4a06e93 100644 --- a/src/nautilus-application.h +++ b/src/nautilus-application.h @@ -73,10 +73,12 @@ GList * nautilus_application_get_window_list (void); GList * nautilus_application_get_spatial_window_list (void); NautilusWindow * nautilus_application_present_spatial_window (NautilusApplication *application, + NautilusWindow *requesting_window, const char *location, GdkScreen *screen); NautilusWindow * nautilus_application_create_navigation_window (NautilusApplication *application, GdkScreen *screen); + void nautilus_application_close_all_navigation_windows (void); void nautilus_application_close_parent_windows (NautilusSpatialWindow *window); void nautilus_application_open_desktop (NautilusApplication *application); diff --git a/src/nautilus-shell.c b/src/nautilus-shell.c index 1fc0c04ba..1fbbc5e87 100644 --- a/src/nautilus-shell.c +++ b/src/nautilus-shell.c @@ -152,8 +152,9 @@ open_window (NautilusShell *shell, const char *uri, const char *geometry, } window = nautilus_application_present_spatial_window (shell->details->application, - uri, - gdk_screen_get_default ()); + NULL, + uri, + gdk_screen_get_default ()); g_free (home_uri); } @@ -347,6 +348,7 @@ restore_one_window_callback (const char *attributes, #endif if (eel_strlen (location) > 0) { window = nautilus_application_present_spatial_window (shell->details->application, + NULL, location, screen); } else { diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c index 4e00748a8..d1c7dd1a6 100644 --- a/src/nautilus-window-manage-views.c +++ b/src/nautilus-window-manage-views.c @@ -685,6 +685,7 @@ open_location (NautilusWindow *window, if (!NAUTILUS_SPATIAL_WINDOW (window)->affect_spatial_window_on_next_location_change) { target_window = nautilus_application_present_spatial_window ( window->application, + window, location, gtk_window_get_screen (GTK_WINDOW (window))); do_load_location = FALSE; @@ -699,6 +700,7 @@ open_location (NautilusWindow *window, case Nautilus_ViewFrame_OPEN_IN_SPATIAL : target_window = nautilus_application_present_spatial_window ( window->application, + window, location, gtk_window_get_screen (GTK_WINDOW (window))); break; |