Index: gedit-app.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/gedit-app.c,v retrieving revision 1.2 diff -u -p -r1.2 gedit-app.c --- gedit-app.c 12 Dec 2005 17:27:55 -0000 1.2 +++ gedit-app.c 3 Jan 2006 15:05:29 -0000 @@ -189,11 +189,11 @@ gedit_app_create_window_real (GeditApp gboolean set_geometry, const gchar *role) { - GtkWindow *window; + GeditWindow *window; gedit_debug (DEBUG_APP); - - window = GTK_WINDOW (g_object_new (GEDIT_TYPE_WINDOW, NULL)); + + window = g_object_new (GEDIT_TYPE_WINDOW, NULL); gedit_debug_message (DEBUG_APP, "Window created"); @@ -213,34 +213,40 @@ gedit_app_create_window_real (GeditApp if (set_geometry) { GdkWindowState state; - + state = gedit_prefs_manager_get_window_state (); if ((state & GDK_WINDOW_STATE_MAXIMIZED) != 0) { - gtk_window_set_default_size (window, + gtk_window_set_default_size (GTK_WINDOW (window), gedit_prefs_manager_get_default_window_width (), gedit_prefs_manager_get_default_window_height ()); - gtk_window_maximize (window); + gtk_window_maximize (GTK_WINDOW (window)); } else { - gtk_window_set_default_size (window, + gtk_window_set_default_size (GTK_WINDOW (window), gedit_prefs_manager_get_window_width (), gedit_prefs_manager_get_window_height ()); - gtk_window_unmaximize (window); + gtk_window_unmaximize (GTK_WINDOW (window)); } if ((state & GDK_WINDOW_STATE_STICKY ) != 0) - gtk_window_stick (window); + gtk_window_stick (GTK_WINDOW (window)); else - gtk_window_unstick (window); + gtk_window_unstick (GTK_WINDOW (window)); } - + app->priv->windows = g_list_prepend (app->priv->windows, window); + + /* if this is our first window make it active asap: + * active_window should never be NULL if there are windows + */ + if (app->priv->active_window == NULL) + app->priv->active_window = window; g_signal_connect (window, "focus_in_event", @@ -255,7 +261,7 @@ gedit_app_create_window_real (GeditApp G_CALLBACK (window_destroy), app); - return GEDIT_WINDOW (window); + return window; } GeditWindow * @@ -292,6 +298,14 @@ gedit_app_get_active_window (GeditApp *a { g_return_val_if_fail (GEDIT_IS_APP (app), NULL); + /* make sure our active window is always realized: + * this is needed on startup if we launch two gedit fast + * enough that the second instance comes up before the + * first one shows its window. + */ + if (!GTK_WIDGET_REALIZED (GTK_WIDGET (app->priv->active_window))) + gtk_widget_realize (GTK_WIDGET (app->priv->active_window)); + return app->priv->active_window; } @@ -306,6 +320,8 @@ _gedit_app_get_window_in_workspace (Gedi /* first try if the active window */ window = app->priv->active_window; + + g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL); ws = gedit_utils_get_window_workspace (GTK_WINDOW (window)); if (ws != workspace && ws != GEDIT_ALL_WORKSPACES) Index: gedit-utils.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/gedit-utils.c,v retrieving revision 1.69 diff -u -p -r1.69 gedit-utils.c --- gedit-utils.c 29 Dec 2005 15:13:39 -0000 1.69 +++ gedit-utils.c 3 Jan 2006 15:05:35 -0000 @@ -779,15 +779,20 @@ gedit_utils_get_current_workspace (GdkSc guint gedit_utils_get_window_workspace (GtkWindow *gtkwindow) { - GdkWindow *window = GTK_WIDGET (gtkwindow)->window; - GdkDisplay *display = gdk_drawable_get_display (window); - + GdkWindow *window; + GdkDisplay *display; Atom type; gint format; gulong nitems; gulong bytes_after; guint *workspace; guint ret = GEDIT_ALL_WORKSPACES; + + g_return_val_if_fail (GTK_IS_WINDOW (gtkwindow), 0); + g_return_val_if_fail (GTK_WIDGET_REALIZED (GTK_WIDGET (gtkwindow)), 0); + + window = GTK_WIDGET (gtkwindow)->window; + display = gdk_drawable_get_display (window); XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window), gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_DESKTOP"),