From 127e98b5f72575798166eb7371ce3f1eff71c594 Mon Sep 17 00:00:00 2001 From: "CDT 1998 Shawn T. Amundson" Date: Mon, 15 Jun 1998 02:25:27 +0000 Subject: [PATCH] app/gdisplay.c app/gdisplay.h app/interface.c app/plug_in.c app/plug_in.h Sun Jun 14 21:16:42 CDT 1998 Shawn T. Amundson * app/gdisplay.c * app/gdisplay.h * app/interface.c * app/plug_in.c * app/plug_in.h * libgimp/gimp.c: added statusbar and progressbar, which the plugins now use if they have a gdisp. Unfortunately this introduces a resize bug I wasn't able to fix immediately. ;-( --- ChangeLog | 12 ++++++ app/actions/plug-in-commands.c | 64 +++++++++++++++++++++++----- app/core/gimpprojection.c | 2 + app/core/gimpprojection.h | 3 ++ app/display/gimpdisplay.c | 2 + app/display/gimpdisplay.h | 3 ++ app/display/gimpdisplayshell-draw.c | 26 ++++++++++- app/display/gimpdisplayshell.c | 26 ++++++++++- app/gdisplay.c | 2 + app/gdisplay.h | 3 ++ app/gui/plug-in-commands.c | 64 +++++++++++++++++++++++----- app/gui/plug-in-menus.c | 64 +++++++++++++++++++++++----- app/interface.c | 26 ++++++++++- app/menus/plug-in-menus.c | 64 +++++++++++++++++++++++----- app/plug-in/gimpplugin-message.c | 64 +++++++++++++++++++++++----- app/plug-in/gimpplugin-progress.c | 64 +++++++++++++++++++++++----- app/plug-in/gimpplugin-progress.h | 2 + app/plug-in/gimpplugin.c | 64 +++++++++++++++++++++++----- app/plug-in/gimpplugin.h | 2 + app/plug-in/gimppluginmanager-call.c | 64 +++++++++++++++++++++++----- app/plug-in/gimppluginmanager-run.c | 64 +++++++++++++++++++++++----- app/plug-in/gimppluginmanager.c | 64 +++++++++++++++++++++++----- app/plug-in/gimppluginmanager.h | 2 + app/plug-in/gimppluginshm.c | 64 +++++++++++++++++++++++----- app/plug-in/plug-in-def.c | 64 +++++++++++++++++++++++----- app/plug-in/plug-in-def.h | 2 + app/plug-in/plug-in-message.c | 64 +++++++++++++++++++++++----- app/plug-in/plug-in-params.c | 64 +++++++++++++++++++++++----- app/plug-in/plug-in-params.h | 2 + app/plug-in/plug-in-progress.c | 64 +++++++++++++++++++++++----- app/plug-in/plug-in-progress.h | 2 + app/plug-in/plug-in-run.c | 64 +++++++++++++++++++++++----- app/plug-in/plug-in-shm.c | 64 +++++++++++++++++++++++----- app/plug-in/plug-in.c | 64 +++++++++++++++++++++++----- app/plug-in/plug-in.h | 2 + app/plug-in/plug-ins.c | 64 +++++++++++++++++++++++----- app/plug-in/plug-ins.h | 2 + app/plug_in.c | 64 +++++++++++++++++++++++----- app/plug_in.h | 2 + libgimp/gimp.c | 4 +- 40 files changed, 1181 insertions(+), 226 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9ccf44ce69..689a3b32ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +Sun Jun 14 21:16:42 CDT 1998 Shawn T. Amundson + + * app/gdisplay.c + * app/gdisplay.h + * app/interface.c + * app/plug_in.c + * app/plug_in.h + * libgimp/gimp.c: added statusbar and progressbar, which + the plugins now use if they have a gdisp. Unfortunately + this introduces a resize bug I wasn't able to fix + immediately. ;-( + Sun Jun 14 18:37:06 1998 Owen Taylor * app/blob.[ch] (blob_bounds): Added new files for diff --git a/app/actions/plug-in-commands.c b/app/actions/plug-in-commands.c index 54563eb655..b0f6eb0d20 100644 --- a/app/actions/plug-in-commands.c +++ b/app/actions/plug-in-commands.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/core/gimpprojection.c b/app/core/gimpprojection.c index 503ab3c4bd..5387b9049d 100644 --- a/app/core/gimpprojection.c +++ b/app/core/gimpprojection.c @@ -126,6 +126,8 @@ gdisplay_new (GImage *gimage, gdisp->proximity = FALSE; gdisp->have_cursor = FALSE; + gdisp->progressid = FALSE; + /* add the new display to the list so that it isn't lost */ display_list = g_slist_append (display_list, (void *) gdisp); diff --git a/app/core/gimpprojection.h b/app/core/gimpprojection.h index 926413ca4f..9f57a6bfeb 100644 --- a/app/core/gimpprojection.h +++ b/app/core/gimpprojection.h @@ -58,6 +58,9 @@ struct _GDisplay GtkWidget *hrule, *vrule; /* widgets for rulers */ GtkWidget *origin; /* widgets for rulers */ GtkWidget *popup; /* widget for popup menu */ + GtkWidget *statusbar; /* widget for statusbar */ + GtkWidget *progressbar; /* widget for progressbar */ + guint progressid; /* id of statusbar message for progress */ InfoDialog *window_info_dialog; /* dialog box for image information */ diff --git a/app/display/gimpdisplay.c b/app/display/gimpdisplay.c index 503ab3c4bd..5387b9049d 100644 --- a/app/display/gimpdisplay.c +++ b/app/display/gimpdisplay.c @@ -126,6 +126,8 @@ gdisplay_new (GImage *gimage, gdisp->proximity = FALSE; gdisp->have_cursor = FALSE; + gdisp->progressid = FALSE; + /* add the new display to the list so that it isn't lost */ display_list = g_slist_append (display_list, (void *) gdisp); diff --git a/app/display/gimpdisplay.h b/app/display/gimpdisplay.h index 926413ca4f..9f57a6bfeb 100644 --- a/app/display/gimpdisplay.h +++ b/app/display/gimpdisplay.h @@ -58,6 +58,9 @@ struct _GDisplay GtkWidget *hrule, *vrule; /* widgets for rulers */ GtkWidget *origin; /* widgets for rulers */ GtkWidget *popup; /* widget for popup menu */ + GtkWidget *statusbar; /* widget for statusbar */ + GtkWidget *progressbar; /* widget for progressbar */ + guint progressid; /* id of statusbar message for progress */ InfoDialog *window_info_dialog; /* dialog box for image information */ diff --git a/app/display/gimpdisplayshell-draw.c b/app/display/gimpdisplayshell-draw.c index cfac92afc5..01ae9fec83 100644 --- a/app/display/gimpdisplayshell-draw.c +++ b/app/display/gimpdisplayshell-draw.c @@ -680,10 +680,12 @@ create_display_shell (int gdisp_id, static GtkAccelGroup *image_accel_group = NULL; GDisplay *gdisp; GtkWidget *table; + GtkWidget *hbox; GtkWidget *arrow; int n_width, n_height; int s_width, s_height; int scalesrc, scaledest; + int contextid; /* Get the gdisplay */ if (! (gdisp = gdisplay_get_ID (gdisp_id))) @@ -737,14 +739,18 @@ create_display_shell (int gdisp_id, gdisp); /* the table containing all widgets */ - table = gtk_table_new (3, 3, FALSE); + table = gtk_table_new (4, 3, FALSE); gtk_table_set_col_spacing (GTK_TABLE (table), 0, 1); gtk_table_set_col_spacing (GTK_TABLE (table), 1, 2); gtk_table_set_row_spacing (GTK_TABLE (table), 0, 1); gtk_table_set_row_spacing (GTK_TABLE (table), 1, 2); + gtk_table_set_row_spacing (GTK_TABLE (table), 2, 2); gtk_container_border_width (GTK_CONTAINER (table), 2); gtk_container_add (GTK_CONTAINER (gdisp->shell), table); + /* hbox for statusbar area */ + hbox = gtk_hbox_new(0,2); + /* scrollbars, rulers, canvas, menu popup button */ gdisp->origin = gtk_button_new (); gtk_widget_set_events (GTK_WIDGET (gdisp->origin), @@ -809,10 +815,25 @@ create_display_shell (int gdisp_id, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0); gtk_table_attach (GTK_TABLE (table), gdisp->vsb, 2, 3, 0, 2, GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + gtk_table_attach (GTK_TABLE (table), hbox, 0, 3, 3, 4, + GTK_FILL, 0, 0, 0); if (! image_popup_menu) menus_get_image_menu (&image_popup_menu, &image_accel_group); + /* statusbar, progressbar */ + gdisp->statusbar = gtk_statusbar_new(); + gtk_box_pack_start (GTK_BOX (hbox), gdisp->statusbar, TRUE, TRUE, 0); + contextid = gtk_statusbar_get_context_id (GTK_STATUSBAR (gdisp->statusbar), + "title"); + gtk_statusbar_push(GTK_STATUSBAR (gdisp->statusbar), + contextid, + title); + + gdisp->progressbar = gtk_progress_bar_new(); + gtk_widget_set_usize(gdisp->progressbar, 100, -1); + gtk_box_pack_start (GTK_BOX (hbox), gdisp->progressbar, FALSE, TRUE, 0); + /* the popup menu */ gdisp->popup = image_popup_menu; @@ -826,6 +847,9 @@ create_display_shell (int gdisp_id, gtk_widget_show (gdisp->hrule); gtk_widget_show (gdisp->vrule); gtk_widget_show (gdisp->canvas); + gtk_widget_show (gdisp->statusbar); + gtk_widget_show (gdisp->progressbar); + gtk_widget_show (hbox); gtk_widget_show (table); gtk_widget_show (gdisp->shell); diff --git a/app/display/gimpdisplayshell.c b/app/display/gimpdisplayshell.c index cfac92afc5..01ae9fec83 100644 --- a/app/display/gimpdisplayshell.c +++ b/app/display/gimpdisplayshell.c @@ -680,10 +680,12 @@ create_display_shell (int gdisp_id, static GtkAccelGroup *image_accel_group = NULL; GDisplay *gdisp; GtkWidget *table; + GtkWidget *hbox; GtkWidget *arrow; int n_width, n_height; int s_width, s_height; int scalesrc, scaledest; + int contextid; /* Get the gdisplay */ if (! (gdisp = gdisplay_get_ID (gdisp_id))) @@ -737,14 +739,18 @@ create_display_shell (int gdisp_id, gdisp); /* the table containing all widgets */ - table = gtk_table_new (3, 3, FALSE); + table = gtk_table_new (4, 3, FALSE); gtk_table_set_col_spacing (GTK_TABLE (table), 0, 1); gtk_table_set_col_spacing (GTK_TABLE (table), 1, 2); gtk_table_set_row_spacing (GTK_TABLE (table), 0, 1); gtk_table_set_row_spacing (GTK_TABLE (table), 1, 2); + gtk_table_set_row_spacing (GTK_TABLE (table), 2, 2); gtk_container_border_width (GTK_CONTAINER (table), 2); gtk_container_add (GTK_CONTAINER (gdisp->shell), table); + /* hbox for statusbar area */ + hbox = gtk_hbox_new(0,2); + /* scrollbars, rulers, canvas, menu popup button */ gdisp->origin = gtk_button_new (); gtk_widget_set_events (GTK_WIDGET (gdisp->origin), @@ -809,10 +815,25 @@ create_display_shell (int gdisp_id, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0); gtk_table_attach (GTK_TABLE (table), gdisp->vsb, 2, 3, 0, 2, GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + gtk_table_attach (GTK_TABLE (table), hbox, 0, 3, 3, 4, + GTK_FILL, 0, 0, 0); if (! image_popup_menu) menus_get_image_menu (&image_popup_menu, &image_accel_group); + /* statusbar, progressbar */ + gdisp->statusbar = gtk_statusbar_new(); + gtk_box_pack_start (GTK_BOX (hbox), gdisp->statusbar, TRUE, TRUE, 0); + contextid = gtk_statusbar_get_context_id (GTK_STATUSBAR (gdisp->statusbar), + "title"); + gtk_statusbar_push(GTK_STATUSBAR (gdisp->statusbar), + contextid, + title); + + gdisp->progressbar = gtk_progress_bar_new(); + gtk_widget_set_usize(gdisp->progressbar, 100, -1); + gtk_box_pack_start (GTK_BOX (hbox), gdisp->progressbar, FALSE, TRUE, 0); + /* the popup menu */ gdisp->popup = image_popup_menu; @@ -826,6 +847,9 @@ create_display_shell (int gdisp_id, gtk_widget_show (gdisp->hrule); gtk_widget_show (gdisp->vrule); gtk_widget_show (gdisp->canvas); + gtk_widget_show (gdisp->statusbar); + gtk_widget_show (gdisp->progressbar); + gtk_widget_show (hbox); gtk_widget_show (table); gtk_widget_show (gdisp->shell); diff --git a/app/gdisplay.c b/app/gdisplay.c index 503ab3c4bd..5387b9049d 100644 --- a/app/gdisplay.c +++ b/app/gdisplay.c @@ -126,6 +126,8 @@ gdisplay_new (GImage *gimage, gdisp->proximity = FALSE; gdisp->have_cursor = FALSE; + gdisp->progressid = FALSE; + /* add the new display to the list so that it isn't lost */ display_list = g_slist_append (display_list, (void *) gdisp); diff --git a/app/gdisplay.h b/app/gdisplay.h index 926413ca4f..9f57a6bfeb 100644 --- a/app/gdisplay.h +++ b/app/gdisplay.h @@ -58,6 +58,9 @@ struct _GDisplay GtkWidget *hrule, *vrule; /* widgets for rulers */ GtkWidget *origin; /* widgets for rulers */ GtkWidget *popup; /* widget for popup menu */ + GtkWidget *statusbar; /* widget for statusbar */ + GtkWidget *progressbar; /* widget for progressbar */ + guint progressid; /* id of statusbar message for progress */ InfoDialog *window_info_dialog; /* dialog box for image information */ diff --git a/app/gui/plug-in-commands.c b/app/gui/plug-in-commands.c index 54563eb655..b0f6eb0d20 100644 --- a/app/gui/plug-in-commands.c +++ b/app/gui/plug-in-commands.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/gui/plug-in-menus.c b/app/gui/plug-in-menus.c index 54563eb655..b0f6eb0d20 100644 --- a/app/gui/plug-in-menus.c +++ b/app/gui/plug-in-menus.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/interface.c b/app/interface.c index cfac92afc5..01ae9fec83 100644 --- a/app/interface.c +++ b/app/interface.c @@ -680,10 +680,12 @@ create_display_shell (int gdisp_id, static GtkAccelGroup *image_accel_group = NULL; GDisplay *gdisp; GtkWidget *table; + GtkWidget *hbox; GtkWidget *arrow; int n_width, n_height; int s_width, s_height; int scalesrc, scaledest; + int contextid; /* Get the gdisplay */ if (! (gdisp = gdisplay_get_ID (gdisp_id))) @@ -737,14 +739,18 @@ create_display_shell (int gdisp_id, gdisp); /* the table containing all widgets */ - table = gtk_table_new (3, 3, FALSE); + table = gtk_table_new (4, 3, FALSE); gtk_table_set_col_spacing (GTK_TABLE (table), 0, 1); gtk_table_set_col_spacing (GTK_TABLE (table), 1, 2); gtk_table_set_row_spacing (GTK_TABLE (table), 0, 1); gtk_table_set_row_spacing (GTK_TABLE (table), 1, 2); + gtk_table_set_row_spacing (GTK_TABLE (table), 2, 2); gtk_container_border_width (GTK_CONTAINER (table), 2); gtk_container_add (GTK_CONTAINER (gdisp->shell), table); + /* hbox for statusbar area */ + hbox = gtk_hbox_new(0,2); + /* scrollbars, rulers, canvas, menu popup button */ gdisp->origin = gtk_button_new (); gtk_widget_set_events (GTK_WIDGET (gdisp->origin), @@ -809,10 +815,25 @@ create_display_shell (int gdisp_id, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0); gtk_table_attach (GTK_TABLE (table), gdisp->vsb, 2, 3, 0, 2, GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + gtk_table_attach (GTK_TABLE (table), hbox, 0, 3, 3, 4, + GTK_FILL, 0, 0, 0); if (! image_popup_menu) menus_get_image_menu (&image_popup_menu, &image_accel_group); + /* statusbar, progressbar */ + gdisp->statusbar = gtk_statusbar_new(); + gtk_box_pack_start (GTK_BOX (hbox), gdisp->statusbar, TRUE, TRUE, 0); + contextid = gtk_statusbar_get_context_id (GTK_STATUSBAR (gdisp->statusbar), + "title"); + gtk_statusbar_push(GTK_STATUSBAR (gdisp->statusbar), + contextid, + title); + + gdisp->progressbar = gtk_progress_bar_new(); + gtk_widget_set_usize(gdisp->progressbar, 100, -1); + gtk_box_pack_start (GTK_BOX (hbox), gdisp->progressbar, FALSE, TRUE, 0); + /* the popup menu */ gdisp->popup = image_popup_menu; @@ -826,6 +847,9 @@ create_display_shell (int gdisp_id, gtk_widget_show (gdisp->hrule); gtk_widget_show (gdisp->vrule); gtk_widget_show (gdisp->canvas); + gtk_widget_show (gdisp->statusbar); + gtk_widget_show (gdisp->progressbar); + gtk_widget_show (hbox); gtk_widget_show (table); gtk_widget_show (gdisp->shell); diff --git a/app/menus/plug-in-menus.c b/app/menus/plug-in-menus.c index 54563eb655..b0f6eb0d20 100644 --- a/app/menus/plug-in-menus.c +++ b/app/menus/plug-in-menus.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/gimpplugin-message.c b/app/plug-in/gimpplugin-message.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/gimpplugin-message.c +++ b/app/plug-in/gimpplugin-message.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/gimpplugin-progress.c b/app/plug-in/gimpplugin-progress.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/gimpplugin-progress.c +++ b/app/plug-in/gimpplugin-progress.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/gimpplugin-progress.h b/app/plug-in/gimpplugin-progress.h index b21709ae95..5cc43b2247 100644 --- a/app/plug-in/gimpplugin-progress.h +++ b/app/plug-in/gimpplugin-progress.h @@ -62,6 +62,8 @@ struct _PlugIn GtkWidget *progress_label; GtkWidget *progress_bar; + gint8 progress_gdisp_ID; /* gdisp_ID of progress */ + gpointer user_data; /* Handle for hanging data onto */ }; diff --git a/app/plug-in/gimpplugin.c b/app/plug-in/gimpplugin.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/gimpplugin.c +++ b/app/plug-in/gimpplugin.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/gimpplugin.h b/app/plug-in/gimpplugin.h index b21709ae95..5cc43b2247 100644 --- a/app/plug-in/gimpplugin.h +++ b/app/plug-in/gimpplugin.h @@ -62,6 +62,8 @@ struct _PlugIn GtkWidget *progress_label; GtkWidget *progress_bar; + gint8 progress_gdisp_ID; /* gdisp_ID of progress */ + gpointer user_data; /* Handle for hanging data onto */ }; diff --git a/app/plug-in/gimppluginmanager-call.c b/app/plug-in/gimppluginmanager-call.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/gimppluginmanager-call.c +++ b/app/plug-in/gimppluginmanager-call.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/gimppluginmanager-run.c b/app/plug-in/gimppluginmanager-run.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/gimppluginmanager-run.c +++ b/app/plug-in/gimppluginmanager-run.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/gimppluginmanager.c b/app/plug-in/gimppluginmanager.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/gimppluginmanager.c +++ b/app/plug-in/gimppluginmanager.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/gimppluginmanager.h b/app/plug-in/gimppluginmanager.h index b21709ae95..5cc43b2247 100644 --- a/app/plug-in/gimppluginmanager.h +++ b/app/plug-in/gimppluginmanager.h @@ -62,6 +62,8 @@ struct _PlugIn GtkWidget *progress_label; GtkWidget *progress_bar; + gint8 progress_gdisp_ID; /* gdisp_ID of progress */ + gpointer user_data; /* Handle for hanging data onto */ }; diff --git a/app/plug-in/gimppluginshm.c b/app/plug-in/gimppluginshm.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/gimppluginshm.c +++ b/app/plug-in/gimppluginshm.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/plug-in-def.c b/app/plug-in/plug-in-def.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/plug-in-def.c +++ b/app/plug-in/plug-in-def.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/plug-in-def.h b/app/plug-in/plug-in-def.h index b21709ae95..5cc43b2247 100644 --- a/app/plug-in/plug-in-def.h +++ b/app/plug-in/plug-in-def.h @@ -62,6 +62,8 @@ struct _PlugIn GtkWidget *progress_label; GtkWidget *progress_bar; + gint8 progress_gdisp_ID; /* gdisp_ID of progress */ + gpointer user_data; /* Handle for hanging data onto */ }; diff --git a/app/plug-in/plug-in-message.c b/app/plug-in/plug-in-message.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/plug-in-message.c +++ b/app/plug-in/plug-in-message.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/plug-in-params.c b/app/plug-in/plug-in-params.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/plug-in-params.c +++ b/app/plug-in/plug-in-params.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/plug-in-params.h b/app/plug-in/plug-in-params.h index b21709ae95..5cc43b2247 100644 --- a/app/plug-in/plug-in-params.h +++ b/app/plug-in/plug-in-params.h @@ -62,6 +62,8 @@ struct _PlugIn GtkWidget *progress_label; GtkWidget *progress_bar; + gint8 progress_gdisp_ID; /* gdisp_ID of progress */ + gpointer user_data; /* Handle for hanging data onto */ }; diff --git a/app/plug-in/plug-in-progress.c b/app/plug-in/plug-in-progress.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/plug-in-progress.c +++ b/app/plug-in/plug-in-progress.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/plug-in-progress.h b/app/plug-in/plug-in-progress.h index b21709ae95..5cc43b2247 100644 --- a/app/plug-in/plug-in-progress.h +++ b/app/plug-in/plug-in-progress.h @@ -62,6 +62,8 @@ struct _PlugIn GtkWidget *progress_label; GtkWidget *progress_bar; + gint8 progress_gdisp_ID; /* gdisp_ID of progress */ + gpointer user_data; /* Handle for hanging data onto */ }; diff --git a/app/plug-in/plug-in-run.c b/app/plug-in/plug-in-run.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/plug-in-run.c +++ b/app/plug-in/plug-in-run.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/plug-in-shm.c b/app/plug-in/plug-in-shm.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/plug-in-shm.c +++ b/app/plug-in/plug-in-shm.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/plug-in.c b/app/plug-in/plug-in.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/plug-in.c +++ b/app/plug-in/plug-in.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/plug-in.h b/app/plug-in/plug-in.h index b21709ae95..5cc43b2247 100644 --- a/app/plug-in/plug-in.h +++ b/app/plug-in/plug-in.h @@ -62,6 +62,8 @@ struct _PlugIn GtkWidget *progress_label; GtkWidget *progress_bar; + gint8 progress_gdisp_ID; /* gdisp_ID of progress */ + gpointer user_data; /* Handle for hanging data onto */ }; diff --git a/app/plug-in/plug-ins.c b/app/plug-in/plug-ins.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug-in/plug-ins.c +++ b/app/plug-in/plug-ins.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug-in/plug-ins.h b/app/plug-in/plug-ins.h index b21709ae95..5cc43b2247 100644 --- a/app/plug-in/plug-ins.h +++ b/app/plug-in/plug-ins.h @@ -62,6 +62,8 @@ struct _PlugIn GtkWidget *progress_label; GtkWidget *progress_bar; + gint8 progress_gdisp_ID; /* gdisp_ID of progress */ + gpointer user_data; /* Handle for hanging data onto */ }; diff --git a/app/plug_in.c b/app/plug_in.c index 54563eb655..b0f6eb0d20 100644 --- a/app/plug_in.c +++ b/app/plug_in.c @@ -143,7 +143,10 @@ static ProcArg progress_init_args[] = { { PDB_STRING, "message", - "Message to use in the progress dialog." } + "Message to use in the progress dialog." }, + { PDB_INT8, + "gdisplay", + "GDisplay to update progressbar in, or -1 for a seperate window" } }; static ProcRecord progress_init_proc = @@ -155,7 +158,7 @@ static ProcRecord progress_init_proc = "Spencer Kimball & Peter Mattis", "1995-1996", PDB_INTERNAL, - 1, + 2, progress_init_args, 0, NULL, @@ -724,6 +727,9 @@ plug_in_new (char *name) void plug_in_destroy (PlugIn *plug_in) { + GDisplay *gdisp; + guint c_id; + if (plug_in) { plug_in_close (plug_in, TRUE); @@ -741,6 +747,16 @@ plug_in_destroy (PlugIn *plug_in) if (plug_in->args[5]) g_free (plug_in->args[5]); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + c_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + gtk_statusbar_pop(GTK_STATUSBAR(gdisp->statusbar), c_id); + gtk_progress_bar_update(GTK_PROGRESS_BAR(gdisp->progressbar), 0.0); + gdisp->progressid = 0; + } + if (plug_in == current_plug_in) plug_in_pop (); @@ -2906,16 +2922,31 @@ plug_in_progress_cancel (GtkWidget *widget, static void plug_in_progress_init (PlugIn *plug_in, - char *message) + char *message, + gint gdisp_ID) { GtkWidget *vbox; GtkWidget *button; + GDisplay *gdisp; + guint context_id; if (!message) message = plug_in->args[0]; + if (gdisp_ID > 0) + gdisp = gdisplay_get_ID(gdisp_ID); + + if (gdisp_ID > 0 && gdisp->progressid == 0) + { + context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gdisp->statusbar), + "progress"); + + gdisp->progressid = gtk_statusbar_push(GTK_STATUSBAR(gdisp->statusbar), + context_id, message); + plug_in->progress_gdisp_ID = gdisp_ID; + } #ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = gtk_dialog_new (); gtk_window_set_wmclass (GTK_WINDOW (plug_in->progress), "plug_in_progress", "Gimp"); @@ -2957,7 +2988,7 @@ plug_in_progress_init (PlugIn *plug_in, gtk_label_set (GTK_LABEL (plug_in->progress_label), message); } #else - if (!plug_in->progress) + else if (!plug_in->progress) { plug_in->progress = 0x1; progress_update (0.0); @@ -2970,14 +3001,24 @@ static void plug_in_progress_update (PlugIn *plug_in, double percentage) { -#ifdef SEPARATE_PROGRESS_BAR - if (!plug_in->progress) - plug_in_progress_init (plug_in, NULL); + GDisplay *gdisp; - gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); + if (plug_in->progress_gdisp_ID > 0) + { + gdisp = gdisplay_get_ID(plug_in->progress_gdisp_ID); + gtk_progress_bar_update( GTK_PROGRESS_BAR (gdisp->progressbar), percentage); + } + else + { +#ifdef SEPARATE_PROGRESS_BAR + if (!plug_in->progress) + plug_in_progress_init (plug_in, NULL, -1); + + gtk_progress_bar_update (GTK_PROGRESS_BAR (plug_in->progress_bar), percentage); #else - progress_update (percentage); + progress_update (percentage); #endif + } } static Argument* @@ -2989,7 +3030,8 @@ progress_init_invoker (Argument *args) { success = TRUE; if (no_interface == FALSE) - plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer); + plug_in_progress_init (current_plug_in, args[0].value.pdb_pointer, + args[1].value.pdb_int); } return procedural_db_return_args (&progress_init_proc, success); diff --git a/app/plug_in.h b/app/plug_in.h index b21709ae95..5cc43b2247 100644 --- a/app/plug_in.h +++ b/app/plug_in.h @@ -62,6 +62,8 @@ struct _PlugIn GtkWidget *progress_label; GtkWidget *progress_bar; + gint8 progress_gdisp_ID; /* gdisp_ID of progress */ + gpointer user_data; /* Handle for hanging data onto */ }; diff --git a/libgimp/gimp.c b/libgimp/gimp.c index d28752bea2..971728a37d 100644 --- a/libgimp/gimp.c +++ b/libgimp/gimp.c @@ -176,18 +176,16 @@ gimp_get_data (gchar * id, } -/* Snorfle - check for valid _gdisp_ID (!= -1) here and use it */ void gimp_progress_init (char *message) { GParam *return_vals; int nreturn_vals; - /* g_print ("%d\n", _gdisp_ID); */ - return_vals = gimp_run_procedure ("gimp_progress_init", &nreturn_vals, PARAM_STRING, message, + PARAM_INT8, _gdisp_ID, PARAM_END); gimp_destroy_params (return_vals, nreturn_vals);