summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2010-12-22 18:07:18 +0900
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2010-12-22 18:07:18 +0900
commita84bfad013b5d4e12ea6c5dc1a191071fa40f101 (patch)
tree4a20298ea992cd93bdf3fd0c56f0e644bdb846e1 /src
parent5a713f9810d93f357b252fa3f6674620084e646c (diff)
parente56a1f699e9fe4b0e51857dccce72b59063d0f6f (diff)
downloadglade-a84bfad013b5d4e12ea6c5dc1a191071fa40f101.tar.gz
Merge branch 'master' into offscreen-gtk3
Conflicts: ChangeLog gladeui/Makefile.am gladeui/glade-widget.c
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am8
-rw-r--r--src/glade-window.c243
-rw-r--r--src/main.c5
3 files changed, 157 insertions, 99 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index fa6f5dc0..7fb3a274 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,13 +5,13 @@ bin_PROGRAMS = glade
glade_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_builddir) \
- -DGLADE_GNOMEHELPDIR="\"$(HELP_DIR)\""
- $(AM_CPPFLAGS)
-
-glade_CFLAGS = \
+ -DGLADE_GNOMEHELPDIR="\"$(HELP_DIR)\"" \
$(GTK_CFLAGS) \
$(IGE_MAC_CFLAGS) \
$(WARN_CFLAGS) \
+ $(AM_CPPFLAGS)
+
+glade_CFLAGS = \
$(AM_CFLAGS)
glade_LDFLAGS = $(AM_LDFLAGS)
diff --git a/src/glade-window.c b/src/glade-window.c
index 8ab4a984..7c5cac4a 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)
@@ -370,13 +322,13 @@ get_default_path (GladeWindow *window)
}
static void
-update_default_path (GladeWindow *window, GladeProject *project)
+update_default_path (GladeWindow *window, const gchar *filename)
{
gchar *path;
- g_return_if_fail (glade_project_get_path (project) != NULL);
+ g_return_if_fail (filename != NULL);
- path = g_path_get_dirname (glade_project_get_path (project));
+ path = g_path_get_dirname (filename);
g_free (window->priv->default_path);
window->priv->default_path = g_strdup (path);
@@ -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))
{
@@ -958,7 +910,7 @@ switch_to_project (GladeWindow *window, GladeProject *project)
/* increase project popularity */
recent_add (window, glade_project_get_path (project));
- update_default_path (window, project);
+ update_default_path (window, glade_project_get_path (project));
for (i = 0; i < n; i++)
{
@@ -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);
@@ -1188,13 +1159,11 @@ save (GladeWindow *window, GladeProject *project, const gchar *path)
return;
}
- glade_app_update_instance_count (project);
-
/* Get display_name here, it could have changed with "Save As..." */
display_name = glade_project_get_name (project);
recent_add (window, glade_project_get_path (project));
- update_default_path (window, project);
+ update_default_path (window, glade_project_get_path (project));
/* refresh names */
refresh_title (window);
@@ -1223,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);
@@ -1452,9 +1424,18 @@ confirm_close_project (GladeWindow *window, GladeProject *project)
}
static void
-do_close (GladeWindow *window, GladeDesignView *view)
+do_close (GladeWindow *window, GladeProject *project)
{
+ GladeDesignView *view;
gint n;
+
+ view = glade_design_view_get_from_project (project);
+
+ if (glade_project_is_loading (project))
+ {
+ glade_project_cancel_load (project);
+ return;
+ }
n = gtk_notebook_page_num (GTK_NOTEBOOK (window->priv->notebook), GTK_WIDGET (view));
@@ -1485,15 +1466,17 @@ close_cb (GtkAction *action, GladeWindow *window)
if (!close)
return;
}
- do_close (window, view);
+ do_close (window, project);
}
static void
quit_cb (GtkAction *action, GladeWindow *window)
{
- GList *list;
+ GList *list, *projects;
- for (list = glade_app_get_projects (); list; list = list->next)
+ projects = g_list_copy (glade_app_get_projects ());
+
+ for (list = projects; list; list = list->next)
{
GladeProject *project = GLADE_PROJECT (list->data);
@@ -1501,20 +1484,24 @@ quit_cb (GtkAction *action, GladeWindow *window)
{
gboolean quit = confirm_close_project (window, project);
if (!quit)
+ {
+ g_list_free (projects);
return;
+ }
}
}
- while (glade_app_get_projects ())
+ for (list = projects; list; list = list->next)
{
GladeProject *project = GLADE_PROJECT (glade_app_get_projects ()->data);
- do_close (window, glade_design_view_get_from_project (project));
+ do_close (window, project);
}
glade_window_config_save (window);
- gtk_main_quit ();
+ g_list_free (projects);
+ gtk_main_quit ();
}
static void
@@ -1650,6 +1637,13 @@ notebook_switch_page_cb (GtkNotebook *notebook,
}
static void
+set_widget_sensitive_on_load (GladeProject *project,
+ GtkWidget *widget)
+{
+ gtk_widget_set_sensitive (widget, TRUE);
+}
+
+static void
notebook_tab_added_cb (GtkNotebook *notebook,
GladeDesignView *view,
guint page_num,
@@ -1688,7 +1682,14 @@ notebook_tab_added_cb (GtkNotebook *notebook,
inspector = glade_inspector_new ();
gtk_widget_show (inspector);
glade_inspector_set_project (GLADE_INSPECTOR (inspector), project);
-
+
+ if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (view), "view-added-while-loading")))
+ {
+ gtk_widget_set_sensitive (inspector, FALSE);
+ g_signal_connect (project, "parse-finished",
+ G_CALLBACK (set_widget_sensitive_on_load), inspector);
+ }
+
gtk_notebook_append_page (GTK_NOTEBOOK (window->priv->inspectors_notebook), inspector, NULL);
@@ -2448,25 +2449,56 @@ static void
tab_close_button_clicked_cb (GtkWidget *close_button,
GladeProject *project)
{
- GladeDesignView *view;
GladeWindow *window = GLADE_WINDOW (glade_app_get_window ());
gboolean close;
- view = glade_design_view_get_from_project (project);
-
if (glade_project_get_modified (project))
{
close = confirm_close_project (window, project);
if (!close)
return;
}
- do_close (window, view);
+ do_close (window, project);
+}
+
+static void
+project_load_progress_cb (GladeProject *project,
+ gint total,
+ gint step,
+ GtkProgressBar *progress)
+{
+ gchar *name;
+
+ name = glade_project_get_name (project);
+
+ /* translators: "project name (objects loaded in total objects)" */
+ 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);
+
+ while (gtk_events_pending ())
+ gtk_main_iteration ();
+}
+
+static void
+project_load_finished_cb (GladeProject *project,
+ GtkWidget *tab_label)
+{
+ GtkWidget *progress, *label;
+
+ progress = g_object_get_data (G_OBJECT (tab_label), "tab-progress");
+ label = g_object_get_data (G_OBJECT (tab_label), "tab-label");
+
+ gtk_widget_hide (progress);
+ gtk_widget_show (label);
}
static GtkWidget *
-create_notebook_tab (GladeWindow *window, GladeProject *project)
+create_notebook_tab (GladeWindow *window, GladeProject *project, gboolean for_file)
{
GtkWidget *tab_label, *ebox, *hbox, *close_button, *label, *dummy_label;
+ GtkWidget *progress;
tab_label = gtk_hbox_new (FALSE, 4);
@@ -2491,15 +2523,33 @@ create_notebook_tab (GladeWindow *window, GladeProject *project)
gtk_misc_set_padding (GTK_MISC (label), 0, 0);
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",
+ G_CALLBACK (project_load_progress_cb), progress);
+
dummy_label = gtk_label_new ("");
gtk_box_pack_start (GTK_BOX (hbox), dummy_label, TRUE, TRUE, 0);
gtk_widget_show (ebox);
gtk_widget_show (hbox);
gtk_widget_show (close_button);
- gtk_widget_show (label);
gtk_widget_show (dummy_label);
+ if (for_file)
+ {
+ gtk_widget_show (progress);
+
+ g_signal_connect (project, "parse-finished",
+ G_CALLBACK (project_load_finished_cb), tab_label);
+ }
+ else
+ gtk_widget_show (label);
+
+ g_object_set_data (G_OBJECT (tab_label), "tab-progress", progress);
g_object_set_data (G_OBJECT (tab_label), "tab-event-box", ebox);
g_object_set_data (G_OBJECT (tab_label), "tab-label", label);
@@ -2507,7 +2557,7 @@ create_notebook_tab (GladeWindow *window, GladeProject *project)
}
static void
-add_project (GladeWindow *window, GladeProject *project)
+add_project (GladeWindow *window, GladeProject *project, gboolean for_file)
{
GtkWidget *view, *label;
@@ -2516,24 +2566,22 @@ add_project (GladeWindow *window, GladeProject *project)
view = glade_design_view_new (project);
gtk_widget_show (view);
+ g_object_set_data (G_OBJECT (view), "view-added-while-loading", GINT_TO_POINTER (for_file));
+
+ /* 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);
g_object_unref (project);
/* Custom notebook tab label (will be refreshed later) */
- label = create_notebook_tab (window, project);
+ label = create_notebook_tab (window, project, for_file);
gtk_notebook_append_page (GTK_NOTEBOOK (window->priv->notebook), GTK_WIDGET (view), label);
gtk_notebook_set_current_page (GTK_NOTEBOOK (window->priv->notebook), -1);
refresh_notebook_tab_for_project (window, project);
-
- /* Kick the inspector in the balls here... */
- glade_project_selection_changed (project);
-
- /* Update preview button */
- gtk_widget_set_sensitive ( GTK_WIDGET (window->priv->preview_button),
- glade_project_get_previewable (project));
}
void
@@ -2551,7 +2599,7 @@ glade_window_new_project (GladeWindow *window)
_("Could not create a new project."));
return;
}
- add_project (window, project);
+ add_project (window, project, FALSE);
}
static gboolean
@@ -2559,30 +2607,30 @@ open_project (GladeWindow *window, const gchar *path)
{
GladeProject *project;
- project = glade_project_load (path);
- if (!project)
+ project = glade_project_new ();
+
+ add_project (window, project, TRUE);
+ update_default_path (window, path);
+
+ if (!glade_project_load_from_file (project, path))
{
+ do_close (window, project);
+
recent_remove (window, path);
return FALSE;
}
-
- add_project (window, project);
/* increase project popularity */
recent_add (window, glade_project_get_path (project));
- update_default_path (window, project);
return TRUE;
-
}
static void
check_reload_project (GladeWindow *window, GladeProject *project)
{
- GladeDesignView *view;
- gchar *path;
- gint ret;
-
+ gchar *path;
+ gint ret;
GtkWidget *dialog;
GtkWidget *button;
gint response;
@@ -2651,10 +2699,9 @@ check_reload_project (GladeWindow *window, GladeProject *project)
}
/* Reopen */
- view = glade_design_view_get_from_project (project);
path = g_strdup (glade_project_get_path (project));
- do_close (window, view);
+ do_close (window, project);
ret = open_project (window, path);
g_free (path);
}
@@ -3424,6 +3471,18 @@ glade_window_class_init (GladeWindowClass *klass)
widget_class->configure_event = glade_window_configure_event;
+ gtk_rc_parse_string ("style \"short_progress\"\n"
+ " { \n"
+ " GtkProgressBar::min-horizontal-bar-height = 1\n"
+ " GtkProgressBar::min-horizontal-bar-width = 1\n"
+ " GtkProgressBar::yspacing = 0\n"
+ " GtkProgressBar::xspacing = 4\n"
+ " xthickness = 0\n"
+ " ythickness = 0\n"
+ " }\n"
+ "\n"
+ "widget \"*.glade-tab-label-progress\" style \"short_progress\"");
+
g_type_class_add_private (klass, sizeof (GladeWindowPrivate));
}
diff --git a/src/main.c b/src/main.c
index e03de2a8..4e440e32 100644
--- a/src/main.c
+++ b/src/main.c
@@ -161,7 +161,8 @@ main (int argc, char *argv[])
if (without_devhelp == FALSE)
glade_window_check_devhelp (window);
-
+
+ gtk_widget_show (GTK_WIDGET (window));
/* load files specified on commandline */
if (files != NULL)
@@ -181,8 +182,6 @@ main (int argc, char *argv[])
if (glade_app_get_project () == NULL)
glade_window_new_project (window);
- gtk_widget_show (GTK_WIDGET (window));
-
gtk_main ();
return 0;