app/nav_window.c
Sat Nov 20 22:10:15 GMT 1999 Andy Thomas <alt@gimp.org> * app/nav_window.c Removed timer when windows are deleted. Removes potential race conditions when closing images.
This commit is contained in:

committed by
Andy Thomas

parent
8413911ff1
commit
0ea4660f56
@ -1,3 +1,10 @@
|
||||
Sat Nov 20 22:10:15 GMT 1999 Andy Thomas <alt@gimp.org>
|
||||
|
||||
* app/nav_window.c
|
||||
|
||||
Removed timer when windows are deleted. Removes
|
||||
potential race conditions when closing images.
|
||||
|
||||
Sat Nov 20 19:47:24 CET 1999 Marc Lehmann <pcg@goof.com>
|
||||
|
||||
* app/gimpui.c: Try some more intelligent behaviour in
|
||||
|
@ -101,6 +101,7 @@ struct _NavWinData
|
||||
gint nav_preview_height;
|
||||
gboolean block_adj_sig;
|
||||
gboolean frozen; /* Has the dialog been frozen ? */
|
||||
guint timer_id;
|
||||
};
|
||||
|
||||
|
||||
@ -209,6 +210,7 @@ nav_window_disp_area (NavWinData *iwd,
|
||||
if(iwd->ptype != NAV_POPUP)
|
||||
{
|
||||
gtk_window_set_focus(GTK_WINDOW (iwd->info_win->shell),iwd->preview);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add(PREVIEW_UPDATE_TIMEOUT,(GtkFunction)nav_preview_update_do_timer,(gpointer)iwd);
|
||||
}
|
||||
else
|
||||
@ -734,6 +736,7 @@ nav_window_preview_events (GtkWidget *widget,
|
||||
else
|
||||
{
|
||||
nav_window_update_preview_blank(iwd);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add(PREVIEW_UPDATE_TIMEOUT,(GtkFunction)nav_preview_update_do_timer,(gpointer)iwd);
|
||||
}
|
||||
break;
|
||||
@ -956,6 +959,9 @@ nav_window_expose_events (GtkWidget *widget,
|
||||
static gint
|
||||
nav_preview_update_do (NavWinData *iwd)
|
||||
{
|
||||
/* If the gdisp_ptr has gone then don't do anything in this timer */
|
||||
if(!iwd->gdisp_ptr)
|
||||
return FALSE;
|
||||
nav_window_update_preview(iwd);
|
||||
nav_window_disp_area(iwd,iwd->gdisp_ptr);
|
||||
gtk_widget_queue_draw(iwd->preview);
|
||||
@ -990,6 +996,7 @@ nav_image_need_update (GtkObject *obj,
|
||||
/* Update preview at a less busy time */
|
||||
nav_window_update_preview_blank(iwd);
|
||||
gtk_widget_draw(iwd->preview, NULL);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add(PREVIEW_UPDATE_TIMEOUT,(GtkFunction)nav_preview_update_do_timer,(gpointer)iwd);
|
||||
}
|
||||
|
||||
@ -1223,6 +1230,7 @@ create_dummy_iwd (void *gdisp_ptr,
|
||||
(nav_preview_size < 0 || nav_preview_size > 256)?NAV_PREVIEW_HEIGHT:nav_preview_size;
|
||||
iwd->block_adj_sig = FALSE;
|
||||
iwd->frozen = FALSE;
|
||||
iwd->timer_id = 0;
|
||||
|
||||
return(iwd);
|
||||
}
|
||||
@ -1455,6 +1463,7 @@ nav_dialog_popup (InfoDialog *idialog)
|
||||
gtk_widget_show (idialog->shell);
|
||||
nav_window_update_preview_blank(iwd);
|
||||
nav_window_update_window_marker(idialog);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add (PREVIEW_UPDATE_TIMEOUT,
|
||||
(GtkFunction) nav_preview_update_do_timer,
|
||||
(gpointer) iwd);
|
||||
@ -1505,6 +1514,8 @@ nav_window_get_gdisp (void)
|
||||
void
|
||||
nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
{
|
||||
NavWinData *iwd;
|
||||
|
||||
/* So this functions works both ways..
|
||||
* it will come in here with info_win == null
|
||||
* if the auto mode is on...
|
||||
@ -1514,7 +1525,6 @@ nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
{
|
||||
if(nav_window_auto != NULL)
|
||||
{
|
||||
NavWinData *iwd;
|
||||
GDisplay * gdisp;
|
||||
|
||||
iwd = (NavWinData *)nav_window_auto->user_data;
|
||||
@ -1523,6 +1533,11 @@ nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
if((GDisplay *) iwd->gdisp_ptr != del_gdisp)
|
||||
return;
|
||||
|
||||
if(iwd->timer_id)
|
||||
gtk_timeout_remove(iwd->timer_id);
|
||||
|
||||
iwd->timer_id = 0;
|
||||
|
||||
gdisp = nav_window_get_gdisp();
|
||||
|
||||
if(gdisp)
|
||||
@ -1542,6 +1557,11 @@ nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
return;
|
||||
}
|
||||
|
||||
/* We are actually freeing a window here so remove any timers left. */
|
||||
iwd = (NavWinData *)info_win->user_data;
|
||||
if(iwd->timer_id)
|
||||
gtk_timeout_remove(iwd->timer_id);
|
||||
|
||||
g_free (info_win->user_data);
|
||||
info_dialog_free (info_win);
|
||||
}
|
||||
|
@ -101,6 +101,7 @@ struct _NavWinData
|
||||
gint nav_preview_height;
|
||||
gboolean block_adj_sig;
|
||||
gboolean frozen; /* Has the dialog been frozen ? */
|
||||
guint timer_id;
|
||||
};
|
||||
|
||||
|
||||
@ -209,6 +210,7 @@ nav_window_disp_area (NavWinData *iwd,
|
||||
if(iwd->ptype != NAV_POPUP)
|
||||
{
|
||||
gtk_window_set_focus(GTK_WINDOW (iwd->info_win->shell),iwd->preview);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add(PREVIEW_UPDATE_TIMEOUT,(GtkFunction)nav_preview_update_do_timer,(gpointer)iwd);
|
||||
}
|
||||
else
|
||||
@ -734,6 +736,7 @@ nav_window_preview_events (GtkWidget *widget,
|
||||
else
|
||||
{
|
||||
nav_window_update_preview_blank(iwd);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add(PREVIEW_UPDATE_TIMEOUT,(GtkFunction)nav_preview_update_do_timer,(gpointer)iwd);
|
||||
}
|
||||
break;
|
||||
@ -956,6 +959,9 @@ nav_window_expose_events (GtkWidget *widget,
|
||||
static gint
|
||||
nav_preview_update_do (NavWinData *iwd)
|
||||
{
|
||||
/* If the gdisp_ptr has gone then don't do anything in this timer */
|
||||
if(!iwd->gdisp_ptr)
|
||||
return FALSE;
|
||||
nav_window_update_preview(iwd);
|
||||
nav_window_disp_area(iwd,iwd->gdisp_ptr);
|
||||
gtk_widget_queue_draw(iwd->preview);
|
||||
@ -990,6 +996,7 @@ nav_image_need_update (GtkObject *obj,
|
||||
/* Update preview at a less busy time */
|
||||
nav_window_update_preview_blank(iwd);
|
||||
gtk_widget_draw(iwd->preview, NULL);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add(PREVIEW_UPDATE_TIMEOUT,(GtkFunction)nav_preview_update_do_timer,(gpointer)iwd);
|
||||
}
|
||||
|
||||
@ -1223,6 +1230,7 @@ create_dummy_iwd (void *gdisp_ptr,
|
||||
(nav_preview_size < 0 || nav_preview_size > 256)?NAV_PREVIEW_HEIGHT:nav_preview_size;
|
||||
iwd->block_adj_sig = FALSE;
|
||||
iwd->frozen = FALSE;
|
||||
iwd->timer_id = 0;
|
||||
|
||||
return(iwd);
|
||||
}
|
||||
@ -1455,6 +1463,7 @@ nav_dialog_popup (InfoDialog *idialog)
|
||||
gtk_widget_show (idialog->shell);
|
||||
nav_window_update_preview_blank(iwd);
|
||||
nav_window_update_window_marker(idialog);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add (PREVIEW_UPDATE_TIMEOUT,
|
||||
(GtkFunction) nav_preview_update_do_timer,
|
||||
(gpointer) iwd);
|
||||
@ -1505,6 +1514,8 @@ nav_window_get_gdisp (void)
|
||||
void
|
||||
nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
{
|
||||
NavWinData *iwd;
|
||||
|
||||
/* So this functions works both ways..
|
||||
* it will come in here with info_win == null
|
||||
* if the auto mode is on...
|
||||
@ -1514,7 +1525,6 @@ nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
{
|
||||
if(nav_window_auto != NULL)
|
||||
{
|
||||
NavWinData *iwd;
|
||||
GDisplay * gdisp;
|
||||
|
||||
iwd = (NavWinData *)nav_window_auto->user_data;
|
||||
@ -1523,6 +1533,11 @@ nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
if((GDisplay *) iwd->gdisp_ptr != del_gdisp)
|
||||
return;
|
||||
|
||||
if(iwd->timer_id)
|
||||
gtk_timeout_remove(iwd->timer_id);
|
||||
|
||||
iwd->timer_id = 0;
|
||||
|
||||
gdisp = nav_window_get_gdisp();
|
||||
|
||||
if(gdisp)
|
||||
@ -1542,6 +1557,11 @@ nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
return;
|
||||
}
|
||||
|
||||
/* We are actually freeing a window here so remove any timers left. */
|
||||
iwd = (NavWinData *)info_win->user_data;
|
||||
if(iwd->timer_id)
|
||||
gtk_timeout_remove(iwd->timer_id);
|
||||
|
||||
g_free (info_win->user_data);
|
||||
info_dialog_free (info_win);
|
||||
}
|
||||
|
@ -101,6 +101,7 @@ struct _NavWinData
|
||||
gint nav_preview_height;
|
||||
gboolean block_adj_sig;
|
||||
gboolean frozen; /* Has the dialog been frozen ? */
|
||||
guint timer_id;
|
||||
};
|
||||
|
||||
|
||||
@ -209,6 +210,7 @@ nav_window_disp_area (NavWinData *iwd,
|
||||
if(iwd->ptype != NAV_POPUP)
|
||||
{
|
||||
gtk_window_set_focus(GTK_WINDOW (iwd->info_win->shell),iwd->preview);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add(PREVIEW_UPDATE_TIMEOUT,(GtkFunction)nav_preview_update_do_timer,(gpointer)iwd);
|
||||
}
|
||||
else
|
||||
@ -734,6 +736,7 @@ nav_window_preview_events (GtkWidget *widget,
|
||||
else
|
||||
{
|
||||
nav_window_update_preview_blank(iwd);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add(PREVIEW_UPDATE_TIMEOUT,(GtkFunction)nav_preview_update_do_timer,(gpointer)iwd);
|
||||
}
|
||||
break;
|
||||
@ -956,6 +959,9 @@ nav_window_expose_events (GtkWidget *widget,
|
||||
static gint
|
||||
nav_preview_update_do (NavWinData *iwd)
|
||||
{
|
||||
/* If the gdisp_ptr has gone then don't do anything in this timer */
|
||||
if(!iwd->gdisp_ptr)
|
||||
return FALSE;
|
||||
nav_window_update_preview(iwd);
|
||||
nav_window_disp_area(iwd,iwd->gdisp_ptr);
|
||||
gtk_widget_queue_draw(iwd->preview);
|
||||
@ -990,6 +996,7 @@ nav_image_need_update (GtkObject *obj,
|
||||
/* Update preview at a less busy time */
|
||||
nav_window_update_preview_blank(iwd);
|
||||
gtk_widget_draw(iwd->preview, NULL);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add(PREVIEW_UPDATE_TIMEOUT,(GtkFunction)nav_preview_update_do_timer,(gpointer)iwd);
|
||||
}
|
||||
|
||||
@ -1223,6 +1230,7 @@ create_dummy_iwd (void *gdisp_ptr,
|
||||
(nav_preview_size < 0 || nav_preview_size > 256)?NAV_PREVIEW_HEIGHT:nav_preview_size;
|
||||
iwd->block_adj_sig = FALSE;
|
||||
iwd->frozen = FALSE;
|
||||
iwd->timer_id = 0;
|
||||
|
||||
return(iwd);
|
||||
}
|
||||
@ -1455,6 +1463,7 @@ nav_dialog_popup (InfoDialog *idialog)
|
||||
gtk_widget_show (idialog->shell);
|
||||
nav_window_update_preview_blank(iwd);
|
||||
nav_window_update_window_marker(idialog);
|
||||
iwd->timer_id =
|
||||
gtk_timeout_add (PREVIEW_UPDATE_TIMEOUT,
|
||||
(GtkFunction) nav_preview_update_do_timer,
|
||||
(gpointer) iwd);
|
||||
@ -1505,6 +1514,8 @@ nav_window_get_gdisp (void)
|
||||
void
|
||||
nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
{
|
||||
NavWinData *iwd;
|
||||
|
||||
/* So this functions works both ways..
|
||||
* it will come in here with info_win == null
|
||||
* if the auto mode is on...
|
||||
@ -1514,7 +1525,6 @@ nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
{
|
||||
if(nav_window_auto != NULL)
|
||||
{
|
||||
NavWinData *iwd;
|
||||
GDisplay * gdisp;
|
||||
|
||||
iwd = (NavWinData *)nav_window_auto->user_data;
|
||||
@ -1523,6 +1533,11 @@ nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
if((GDisplay *) iwd->gdisp_ptr != del_gdisp)
|
||||
return;
|
||||
|
||||
if(iwd->timer_id)
|
||||
gtk_timeout_remove(iwd->timer_id);
|
||||
|
||||
iwd->timer_id = 0;
|
||||
|
||||
gdisp = nav_window_get_gdisp();
|
||||
|
||||
if(gdisp)
|
||||
@ -1542,6 +1557,11 @@ nav_window_free (GDisplay *del_gdisp,InfoDialog *info_win)
|
||||
return;
|
||||
}
|
||||
|
||||
/* We are actually freeing a window here so remove any timers left. */
|
||||
iwd = (NavWinData *)info_win->user_data;
|
||||
if(iwd->timer_id)
|
||||
gtk_timeout_remove(iwd->timer_id);
|
||||
|
||||
g_free (info_win->user_data);
|
||||
info_dialog_free (info_win);
|
||||
}
|
||||
|
Reference in New Issue
Block a user