summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@dhcp-100-2-40.bos.redhat.com>2009-04-13 19:12:47 -0400
committerSøren Sandmann Pedersen <ssp@dhcp-100-2-40.bos.redhat.com>2009-04-13 19:12:47 -0400
commit22f04c7462ae7faa989f107710330e7f49a1ddd0 (patch)
treedb264daa922db4ad40c4df39131cb7cc578c4d4f
parent93813f8c8c3f394b4515db62e824ebe1ed1d1bbf (diff)
Simplify use-existing-window logic
-rw-r--r--siv.c15
-rw-r--r--siv.h5
-rw-r--r--window.c20
3 files changed, 25 insertions, 15 deletions
diff --git a/siv.c b/siv.c
index 01a4adc..aa4c4dc 100644
--- a/siv.c
+++ b/siv.c
@@ -376,22 +376,17 @@ open_file (App *app, const char *filename, GPtrArray *err_files)
for (i = 0; i < app->windows->len; ++i)
{
- const char *f;
- SivWindow *w;
+ SivWindow *w = app->windows->pdata[i];
- w = app->windows->pdata[i];
- f = window_get_filename (w);
-
- if (!f)
+ if (window_is_blank (w))
{
- /* empty window */
window = w;
break;
}
-
- if (strcmp (f, filename) == 0)
+
+ if (window_matches_file (w, filename))
{
- window_show (window, GDK_CURRENT_TIME);
+ window_show (w, GDK_CURRENT_TIME);
return TRUE;
}
}
diff --git a/siv.h b/siv.h
index cfbafea..abc4461 100644
--- a/siv.h
+++ b/siv.h
@@ -72,8 +72,9 @@ gboolean window_load_file (SivWindow *window,
void window_show (SivWindow *window,
guint32 time);
void window_present (SivWindow *window);
-const char *window_get_filename (SivWindow *window);
+gboolean window_matches_file (SivWindow *window,
+ const char *filename);
+gboolean window_is_blank (SivWindow *window);
void window_free (SivWindow *window);
-
#endif
diff --git a/window.c b/window.c
index 05ba209..6a1cb72 100644
--- a/window.c
+++ b/window.c
@@ -1225,8 +1225,22 @@ window_show (SivWindow *window, guint32 time)
gtk_window_present_with_time (get_widget (window, "main_window"), time);
}
-const char *
-window_get_filename (SivWindow *window)
+gboolean
+window_matches_file (SivWindow *window,
+ const char *filename)
+{
+ char *canon = canonicalize_filename (filename);
+ gboolean match;
+
+ match = window->filename && strcmp (canon, window->filename) == 0;
+
+ g_free (canon);
+
+ return match;
+}
+
+gboolean
+window_is_blank (SivWindow *window)
{
- return window->filename;
+ return !window->filename;
}