rendered paste bodyIndex: 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"),