summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan R. García Blanco <juanrgar@gmail.com>2001-01-01 01:30:11 +0100
committerJuan R. García Blanco <juanrgar@gmail.com>2015-04-04 21:20:50 +0200
commitda65b1bcafd1a9d49bbd3dcbcee6b1ec92d835be (patch)
treef3574e8d545badc5e6115ccf52d1075ba063a326
parentec9aba6e53ebf81f3d3e037dafd81faad4b6d5f7 (diff)
downloadgnome-dictionary-da65b1bcafd1a9d49bbd3dcbcee6b1ec92d835be.tar.gz
app: Show a spinner while loading word definitions
Use a stack to accomodate definition box and a spinner. See https://bugzilla.gnome.org/show_bug.cgi?id=334866
-rw-r--r--src/gdict-app-window.ui27
-rw-r--r--src/gdict-window.c14
-rw-r--r--src/gdict-window.h2
3 files changed, 40 insertions, 3 deletions
diff --git a/src/gdict-app-window.ui b/src/gdict-app-window.ui
index 77abbb2..b14690f 100644
--- a/src/gdict-app-window.ui
+++ b/src/gdict-app-window.ui
@@ -6,12 +6,33 @@
<property name="can_focus">False</property>
<property name="show_menubar">False</property>
<child>
- <object class="GtkBox" id="main_box">
+ <object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
<child>
- <placeholder/>
+ <object class="GtkSpinner" id="spinner">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="name">spinner</property>
+ <property name="title" translatable="yes">page0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="main_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="name">main</property>
+ <property name="title" translatable="yes">page1</property>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
</child>
diff --git a/src/gdict-window.c b/src/gdict-window.c
index a62ac15..65544d0 100644
--- a/src/gdict-window.c
+++ b/src/gdict-window.c
@@ -235,6 +235,10 @@ gdict_window_lookup_start_cb (GdictContext *context,
window->current_definition = 0;
gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), window->busy_cursor);
+
+ gtk_spinner_start (GTK_SPINNER (window->spinner));
+ gtk_widget_show (window->spinner);
+ gtk_stack_set_visible_child_name (GTK_STACK (window->stack), "spinner");
}
static void
@@ -275,6 +279,10 @@ gdict_window_lookup_end_cb (GdictContext *context,
gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL);
+ gtk_stack_set_visible_child_name (GTK_STACK (window->stack), "main");
+ gtk_spinner_stop (GTK_SPINNER (window->spinner));
+ gtk_widget_hide (window->spinner);
+
if (count == 0)
{
g_free (window->word);
@@ -290,6 +298,10 @@ gdict_window_error_cb (GdictContext *context,
GdictWindow *window)
{
gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL);
+
+ gtk_stack_set_visible_child_name (GTK_STACK (window->stack), "main");
+ gtk_spinner_stop (GTK_SPINNER (window->spinner));
+ gtk_widget_hide (window->spinner);
/* launch the speller only on NO_MATCH */
if (error->code == GDICT_CONTEXT_ERROR_NO_MATCH)
@@ -1683,6 +1695,8 @@ gdict_window_class_init (GdictWindowClass *klass)
gtk_widget_class_bind_template_child (widget_class, GdictWindow, header_bar);
gtk_widget_class_bind_template_child (widget_class, GdictWindow, entry);
gtk_widget_class_bind_template_child (widget_class, GdictWindow, main_box);
+ gtk_widget_class_bind_template_child (widget_class, GdictWindow, spinner);
+ gtk_widget_class_bind_template_child (widget_class, GdictWindow, stack);
gdict_window_properties[PROP_ACTION] =
g_param_spec_enum ("action",
diff --git a/src/gdict-window.h b/src/gdict-window.h
index c01f60c..1ab2448 100644
--- a/src/gdict-window.h
+++ b/src/gdict-window.h
@@ -51,6 +51,8 @@ struct _GdictWindow
GtkWidget *header_bar;
GtkWidget *main_box;
GtkWidget *entry;
+ GtkWidget *spinner;
+ GtkWidget *stack;
/* sidebar widgets */
GtkWidget *speller;