summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2010-12-22 17:13:41 +0900
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2010-12-22 17:13:41 +0900
commitaf7f4a36e693740ecd912a15209d43b2a217e19c (patch)
tree89d62c2b94543e2a874ea5bf61dc700929f11c80 /src
parent20f158b9b0ea4e9a16bd5fbbaaf0c15b8d798369 (diff)
downloadglade-af7f4a36e693740ecd912a15209d43b2a217e19c.tar.gz
* gladeui/glade-project.c: Added "parse-began" signal
* gladeui/glade-design-view.c: Hide workspace and show load progress while loading so that one cannot access project widgets during the load (insensitive workspace was problematic and causing some loaded project windows to be permanently insensitive). * src/glade-window.c: Avoid any messups during project load, cannot close projects while they are loading, etc.
Diffstat (limited to 'src')
-rw-r--r--src/glade-window.c94
1 files changed, 30 insertions, 64 deletions
diff --git a/src/glade-window.c b/src/glade-window.c
index a86ce53e..a72d21df 100644
--- a/src/glade-window.c
+++ b/src/glade-window.c
@@ -283,54 +283,6 @@ get_formatted_project_name_for_display (GladeProject *project, FormatNameFlags f
return pass3;
}
-static gchar *
-replace_home_dir_with_tilde (const gchar *path)
-{
-#ifdef G_OS_UNIX
- gchar *tmp;
- gchar *home;
-
- g_return_val_if_fail (path != NULL, NULL);
-
- /* Note that g_get_home_dir returns a const string */
- tmp = (gchar *) g_get_home_dir ();
-
- if (tmp == NULL)
- return g_strdup (path);
-
- home = g_filename_to_utf8 (tmp, -1, NULL, NULL, NULL);
- if (home == NULL)
- return g_strdup (path);
-
- if (strcmp (path, home) == 0)
- {
- g_free (home);
-
- return g_strdup ("~");
- }
-
- tmp = home;
- home = g_strdup_printf ("%s/", tmp);
- g_free (tmp);
-
- if (g_str_has_prefix (path, home))
- {
- gchar *res;
-
- res = g_strdup_printf ("~/%s", path + strlen (home));
-
- g_free (home);
-
- return res;
- }
-
- g_free (home);
-
- return g_strdup (path);
-#else
- return g_strdup (path);
-#endif
-}
static void
refresh_title (GladeWindow *window)
@@ -555,7 +507,7 @@ format_project_list_item_tooltip (GladeProject *project)
if (glade_project_get_path (project))
{
- path = replace_home_dir_with_tilde (glade_project_get_path (project));
+ path = glade_utils_replace_home_dir_with_tilde (glade_project_get_path (project));
if (glade_project_get_readonly (project))
{
@@ -1120,6 +1072,22 @@ open_cb (GtkAction *action, GladeWindow *window)
g_free (path);
}
+static gboolean
+check_loading_project_for_save (GladeProject *project)
+{
+ if (glade_project_is_loading (project))
+ {
+ gchar *name = glade_project_get_name (project);
+
+ glade_util_ui_message (glade_app_get_window(),
+ GLADE_UI_INFO, NULL,
+ _("Project %s is still loading."), name);
+ g_free (name);
+ return TRUE;
+ }
+ return FALSE;
+}
+
static void
save (GladeWindow *window, GladeProject *project, const gchar *path)
{
@@ -1130,6 +1098,9 @@ save (GladeWindow *window, GladeProject *project, const gchar *path)
GtkWidget *button;
gint response;
+ if (check_loading_project_for_save (project))
+ return;
+
/* check for external modification to the project file */
mtime = glade_util_get_file_mtime (glade_project_get_path (project), NULL);
@@ -1221,6 +1192,9 @@ save_as (GladeWindow *window)
if (project == NULL)
return;
+ if (check_loading_project_for_save (project))
+ return;
+
filechooser = glade_util_file_dialog_new (_("Save As\342\200\246"), project,
GTK_WINDOW (window),
GLADE_FILE_DIALOG_ACTION_SAVE);
@@ -2494,15 +2468,12 @@ project_load_progress_cb (GladeProject *project,
gint step,
GtkProgressBar *progress)
{
- gchar *text;
gchar *name;
name = glade_project_get_name (project);
/* translators: "project name (objects loaded in total objects)" */
- text = g_strdup_printf (_("%s (%d of %d)"), name, step, total);
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progress), text);
- g_free (text);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progress), name);
g_free (name);
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress), step * 1.0 / total);
@@ -2554,6 +2525,8 @@ create_notebook_tab (GladeWindow *window, GladeProject *project, gboolean for_fi
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
progress = gtk_progress_bar_new ();
+ gtk_widget_add_events (progress,
+ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
gtk_widget_set_name (progress, "glade-tab-label-progress");
gtk_box_pack_start (GTK_BOX (hbox), progress, FALSE, FALSE, 0);
g_signal_connect (project, "load-progress",
@@ -2594,14 +2567,10 @@ add_project (GladeWindow *window, GladeProject *project, gboolean for_file)
view = glade_design_view_new (project);
gtk_widget_show (view);
- if (for_file)
- {
- g_object_set_data (G_OBJECT (view), "view-added-while-loading", GINT_TO_POINTER (1));
+ g_object_set_data (G_OBJECT (view), "view-added-while-loading", GINT_TO_POINTER (for_file));
- gtk_widget_set_sensitive (view, FALSE);
- g_signal_connect (project, "parse-finished",
- G_CALLBACK (set_widget_sensitive_on_load), view);
- }
+ /* Update preview button */
+ gtk_widget_set_sensitive (GTK_WIDGET (window->priv->preview_button), FALSE);
/* Pass ownership of the project to the app */
glade_app_add_project (project);
@@ -2614,10 +2583,6 @@ add_project (GladeWindow *window, GladeProject *project, gboolean for_file)
gtk_notebook_set_current_page (GTK_NOTEBOOK (window->priv->notebook), -1);
refresh_notebook_tab_for_project (window, project);
-
- /* Update preview button */
- gtk_widget_set_sensitive (GTK_WIDGET (window->priv->preview_button),
- glade_project_get_previewable (project));
}
void
@@ -3535,6 +3500,7 @@ glade_window_class_init (GladeWindowClass *klass)
" { \n"
" GtkProgressBar::min-horizontal-bar-height = 1\n"
" GtkProgressBar::yspacing = 0\n"
+ " GtkProgressBar::xspacing = 0\n"
" xthickness = 0\n"
" ythickness = 0\n"
" }\n"