[gedit/gnome-3-0] When a new window is created it should contain a tab
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit/gnome-3-0] When a new window is created it should contain a tab
- Date: Mon, 13 Jun 2011 13:41:58 +0000 (UTC)
commit 14d8898bf03db8f95d79b9f259334636bb2ebfc5
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Jun 5 00:36:59 2011 +0200
When a new window is created it should contain a tab
Try to fix the logic with which we choose whether to create a new tab or
not.
gedit/gedit-app.c | 6 ++--
gedit/gedit-dbus.c | 85 +++++++++++++++++++++++++++++++--------------------
2 files changed, 55 insertions(+), 36 deletions(-)
---
diff --git a/gedit/gedit-app.c b/gedit/gedit-app.c
index 59a5a49..02cfc0c 100644
--- a/gedit/gedit-app.c
+++ b/gedit/gedit-app.c
@@ -899,7 +899,8 @@ is_in_viewport (GeditWindow *window,
* equal parts called viewports. This function retrives the #GeditWindow in
* the given viewport of the given workspace.
*
- * Return value: the #GeditWindow in the given viewport of the given workspace.
+ * Return value: the #GeditWindow in the given viewport of the given workspace
+ * or %NULL% if no window is found.
*/
GeditWindow *
_gedit_app_get_window_in_viewport (GeditApp *app,
@@ -931,8 +932,7 @@ _gedit_app_get_window_in_viewport (GeditApp *app,
return window;
}
- /* no window on this workspace... create a new one */
- return gedit_app_create_window (app, screen);
+ return NULL;
}
/**
diff --git a/gedit/gedit-dbus.c b/gedit/gedit-dbus.c
index 23fd04b..64aafe8 100644
--- a/gedit/gedit-dbus.c
+++ b/gedit/gedit-dbus.c
@@ -830,8 +830,7 @@ display_open_if_needed (const gchar *name)
static GeditWindow *
window_from_display_arguments (gboolean new_window,
- DisplayParameters *dparams,
- gboolean create)
+ DisplayParameters *dparams)
{
GdkScreen *screen = NULL;
GeditApp *app;
@@ -870,18 +869,16 @@ window_from_display_arguments (gboolean new_window,
ret = gedit_app_get_active_window (app);
}
- if (!ret && create)
+ if (!ret)
{
ret = gedit_app_create_window (app, screen);
- gedit_window_create_tab (ret, TRUE);
}
return ret;
}
static gboolean
-is_empty_window (GeditWindow *window,
- gboolean check_untouched)
+is_empty_window (GeditWindow *window)
{
GList *views;
gboolean ret = FALSE;
@@ -892,7 +889,20 @@ is_empty_window (GeditWindow *window,
{
ret = TRUE;
}
- else if (check_untouched && views->next == NULL)
+
+ g_list_free (views);
+ return ret;
+}
+
+static gboolean
+is_untouched_window (GeditWindow *window)
+{
+ GList *views;
+ gboolean ret = FALSE;
+
+ views = gedit_window_get_views (window);
+
+ if (views != NULL && views->next == NULL)
{
GeditView *view = GEDIT_VIEW (views->data);
GeditDocument *doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
@@ -963,7 +973,7 @@ wait_handler_dbus (GObject *object,
g_object_unref (conn);
if (data->window && object != G_OBJECT (data->window) &&
- data->close_window && is_empty_window (data->window, FALSE))
+ data->close_window && is_empty_window (data->window))
{
/* Close the window */
gtk_widget_destroy (GTK_WIDGET (data->window));
@@ -1314,7 +1324,6 @@ handle_open_fds (GeditDBus *dbus,
g_slist_free (tabs);
return g_slist_concat (loaded, g_slist_reverse (ret));
-
}
static void
@@ -1340,6 +1349,8 @@ dbus_handle_open (GeditDBus *dbus,
GeditWindow *window;
GSList *loaded_documents = NULL;
gboolean empty_window;
+ gboolean untouched_window;
+ gboolean jump_to;
WaitData *data;
guint32 wait_id = 0;
@@ -1368,8 +1379,7 @@ dbus_handle_open (GeditDBus *dbus,
NULL);
window = window_from_display_arguments (new_window,
- &display_parameters,
- TRUE);
+ &display_parameters);
g_free (display_parameters.display_name);
@@ -1392,7 +1402,8 @@ dbus_handle_open (GeditDBus *dbus,
g_free (charset_encoding);
- empty_window = is_empty_window (window, TRUE);
+ empty_window = is_empty_window (window);
+ untouched_window = is_untouched_window (window);
extract_optional_parameters (options_hash,
"line_position", &open_parameters.line_position,
@@ -1423,18 +1434,37 @@ dbus_handle_open (GeditDBus *dbus,
"startup_time", &startup_time,
NULL);
- set_interaction_time_and_present (window, startup_time);
+ if (new_document)
+ {
+ GeditTab *tab;
- if (!wait)
+ tab = gedit_window_create_tab (window, TRUE);
+
+ /* when forcing a new doc, it should be the active tab */
+ jump_to = FALSE;
+
+ loaded_documents = g_slist_append (loaded_documents,
+ gedit_tab_get_document (tab));
+ }
+ else if (loaded_documents == NULL)
{
- gboolean jump_to = loaded_documents == NULL;
+ GeditTab *tab;
- if (new_document)
- {
- gedit_window_create_tab (window, jump_to);
- jump_to = FALSE;
- }
+ tab = gedit_window_create_tab (window, TRUE);
+ jump_to = TRUE;
+
+ loaded_documents = g_slist_append (loaded_documents,
+ gedit_tab_get_document (tab));
+ }
+ else
+ {
+ jump_to = FALSE;
+ }
+ set_interaction_time_and_present (window, startup_time);
+
+ if (!wait)
+ {
handle_open_pipe (dbus,
pipe_path,
window,
@@ -1444,30 +1474,19 @@ dbus_handle_open (GeditDBus *dbus,
}
else
{
- gboolean jump_to = loaded_documents == NULL;
gboolean has_pipe;
data = g_slice_new (WaitData);
data->dbus = dbus;
data->window = window;
- data->close_window = empty_window;
+ data->close_window = (empty_window || untouched_window);
data->wait_id = ++dbus->priv->next_wait_id;
data->num_handlers = 0;
/* for the return value */
wait_id = data->wait_id;
- if (new_document)
- {
- GeditTab *tab;
- tab = gedit_window_create_tab (window, jump_to);
- jump_to = FALSE;
-
- loaded_documents = g_slist_append (loaded_documents,
- gedit_tab_get_document (tab));
- }
-
has_pipe = handle_open_pipe (dbus,
pipe_path,
window,
@@ -1477,7 +1496,7 @@ dbus_handle_open (GeditDBus *dbus,
/* Install wait handler on the window if there were no documents
opened */
- if (loaded_documents == NULL && !has_pipe)
+ if ((loaded_documents == NULL) && !has_pipe)
{
/* Add wait handler on the window */
install_wait_handler (dbus,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]