aboutsummaryrefslogtreecommitdiffstats
path: root/shell/evolution-test-component.c
diff options
context:
space:
mode:
authorEttore Perazzoli <ettore@src.gnome.org>2001-06-24 21:13:50 +0800
committerEttore Perazzoli <ettore@src.gnome.org>2001-06-24 21:13:50 +0800
commitea40bb0823d313579eb992f441d6fd08f7ef23a7 (patch)
tree36eaa395508d25f0c8ae26d56ed0ddf44f40793d /shell/evolution-test-component.c
parent5b52672a1524bd6fda554c2abab496f856a5bbee (diff)
downloadgsoc2013-evolution-ea40bb0823d313579eb992f441d6fd08f7ef23a7.tar
gsoc2013-evolution-ea40bb0823d313579eb992f441d6fd08f7ef23a7.tar.gz
gsoc2013-evolution-ea40bb0823d313579eb992f441d6fd08f7ef23a7.tar.bz2
gsoc2013-evolution-ea40bb0823d313579eb992f441d6fd08f7ef23a7.tar.lz
gsoc2013-evolution-ea40bb0823d313579eb992f441d6fd08f7ef23a7.tar.xz
gsoc2013-evolution-ea40bb0823d313579eb992f441d6fd08f7ef23a7.tar.zst
gsoc2013-evolution-ea40bb0823d313579eb992f441d6fd08f7ef23a7.zip
Added an EvolutionActivityClient object to libeshell, to handle
updating of progress information from the component's side. This object allows to automatically set a lower limit to the delay between CORBA calls towards the shell, so that the component isn't slowed down too much by doing too frequent updates. Also changed the test component to use this instead of doing CORBA calls directly. svn path=/trunk/; revision=10449
Diffstat (limited to 'shell/evolution-test-component.c')
-rw-r--r--shell/evolution-test-component.c164
1 files changed, 24 insertions, 140 deletions
diff --git a/shell/evolution-test-component.c b/shell/evolution-test-component.c
index 40ea6b6e7c..f9f199e606 100644
--- a/shell/evolution-test-component.c
+++ b/shell/evolution-test-component.c
@@ -28,6 +28,7 @@
#endif
#include "evolution-shell-component.h"
+#include "evolution-activity-client.h"
#include <bonobo/bonobo-generic-factory.h>
#include <bonobo/bonobo-main.h>
@@ -45,104 +46,19 @@ static const EvolutionShellComponentFolderType folder_types[] = {
static EvolutionShellClient *parent_shell = NULL;
-
-static CORBA_long activity_id = 0;
-
-static BonoboListener *task_bar_event_listener;
+static EvolutionActivityClient *activity_client;
static int timeout_id = 0;
static int progress = -1;
-static void
-create_icon_from_pixbuf (GdkPixbuf *pixbuf,
- GNOME_Evolution_Icon *frame_return)
-{
- const char *sp;
- CORBA_octet *dp;
- int width, height, total_width, rowstride;
- int i, j;
- gboolean has_alpha;
-
- width = gdk_pixbuf_get_width (pixbuf);
- height = gdk_pixbuf_get_height (pixbuf);
- rowstride = gdk_pixbuf_get_rowstride (pixbuf);
- has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
-
- if (has_alpha)
- total_width = 4 * width;
- else
- total_width = 3 * width;
-
- frame_return->width = width;
- frame_return->height = height;
- frame_return->hasAlpha = has_alpha;
-
- frame_return->rgba_data._length = frame_return->height * total_width;
- frame_return->rgba_data._maximum = frame_return->rgba_data._length;
- frame_return->rgba_data._buffer = CORBA_sequence_CORBA_octet_allocbuf (frame_return->rgba_data._maximum);
-
- sp = gdk_pixbuf_get_pixels (pixbuf);
- dp = frame_return->rgba_data._buffer;
- for (i = 0; i < height; i ++) {
- for (j = 0; j < total_width; j++) {
- *(dp ++) = sp[j];
- }
- sp += rowstride;
- }
-}
-
-static GNOME_Evolution_AnimatedIcon *
-create_animated_icon (void)
-{
- GNOME_Evolution_AnimatedIcon *animated_icon;
- GdkPixbuf *pixbuf;
-
- animated_icon = GNOME_Evolution_AnimatedIcon__alloc ();
-
- animated_icon->_length = 1;
- animated_icon->_maximum = 1;
- animated_icon->_buffer = CORBA_sequence_GNOME_Evolution_Icon_allocbuf (animated_icon->_maximum);
-
- pixbuf = gdk_pixbuf_new_from_file (gnome_pixmap_file ("gnome-money.png"));
- create_icon_from_pixbuf (pixbuf, &animated_icon->_buffer[0]);
- gdk_pixbuf_unref (pixbuf);
-
- CORBA_sequence_set_release (animated_icon, TRUE);
-
- return animated_icon;
-}
-
-
-static void
-task_bar_event_listener_callback (BonoboListener *listener,
- char *event_name,
- CORBA_any *any,
- CORBA_Environment *ev,
- void *data)
-{
- g_print ("Taskbar event -- %s\n", event_name);
-}
-
/* Timeout #3: We are done. */
static int
timeout_callback_3 (void *data)
{
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Activity_operationFinished (evolution_shell_client_get_activity_interface (parent_shell),
- activity_id, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Cannot report operation as finished; exception returned -- %s\n",
- ev._repo_id);
- CORBA_exception_free (&ev);
- return FALSE;
- }
+ gtk_object_unref (GTK_OBJECT (activity_client));
- CORBA_exception_free (&ev);
+ g_print ("--> Done.\n");
return FALSE;
}
@@ -151,31 +67,20 @@ timeout_callback_3 (void *data)
static int
timeout_callback_2 (void *data)
{
- CORBA_Environment ev;
-
if (progress < 0)
progress = 0;
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Activity_operationProgressing (evolution_shell_client_get_activity_interface (parent_shell),
- activity_id,
- "Operation Foo in progress",
- (CORBA_float) progress / 100.0,
- &ev);
+ g_print ("--> Updating %d\n", progress);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Cannot update operation; exception returned -- %s\n",
- ev._repo_id);
- CORBA_exception_free (&ev);
+ if (! evolution_activity_client_update (activity_client, "Operation Foo in progress",
+ (float) progress / 100.0)) {
+ g_warning ("Error when updating operation");
return FALSE;
}
- CORBA_exception_free (&ev);
-
- progress += 10;
+ progress ++;
if (progress > 100) {
- gtk_timeout_add (1000, timeout_callback_3, NULL);
+ gtk_timeout_add (200, timeout_callback_3, NULL);
return FALSE;
}
@@ -186,50 +91,29 @@ timeout_callback_2 (void *data)
static int
timeout_callback_1 (void *data)
{
- CORBA_boolean suggest_display;
- CORBA_Environment ev;
- GNOME_Evolution_AnimatedIcon *animated_icon;
- GNOME_Evolution_Activity activity_interface;
+ gboolean suggest_display;
+ GdkPixbuf *animated_icon[2];
- activity_interface = evolution_shell_client_get_activity_interface (parent_shell);
- if (activity_interface== CORBA_OBJECT_NIL)
- return FALSE;
+ animated_icon[0] = gdk_pixbuf_new_from_file (gnome_pixmap_file ("gnome-money.png"));
+ animated_icon[1] = NULL;
- CORBA_exception_init (&ev);
+ g_assert (animated_icon[0] != NULL);
- g_print ("Component becoming busy -- %s\n", COMPONENT_ID);
-
- task_bar_event_listener = bonobo_listener_new (task_bar_event_listener_callback, NULL);
-
- animated_icon = create_animated_icon ();
-
- GNOME_Evolution_Activity_operationStarted (activity_interface,
- COMPONENT_ID,
- animated_icon,
- "Operation Foo started!",
- FALSE,
- bonobo_object_corba_objref (BONOBO_OBJECT (task_bar_event_listener)),
- &activity_id,
- &suggest_display,
- &ev);
-
- CORBA_free (animated_icon);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Cannot start an operation; exception returned -- %s\n",
- ev._repo_id);
- CORBA_exception_free (&ev);
+ activity_client = evolution_activity_client_new (parent_shell, COMPONENT_ID,
+ animated_icon,
+ "Operation Foo started!",
+ FALSE,
+ &suggest_display);
+ if (activity_client == CORBA_OBJECT_NIL) {
+ g_warning ("Cannot create EvolutionActivityClient object");
return FALSE;
}
- g_print (" --> Activity ID: %ld\n", (long) activity_id);
-
+ g_print ("Component becoming busy -- %s\n", COMPONENT_ID);
if (suggest_display)
g_print (" --> Could display dialog box.\n");
- CORBA_exception_free (&ev);
-
- gtk_timeout_add (3000, timeout_callback_2, NULL);
+ gtk_timeout_add (100, timeout_callback_2, NULL);
return FALSE;
}