Additional fixes for the desktop handlers

This commit is contained in:
Pierre Pronchery 2020-09-26 19:21:42 +02:00
parent 178516c424
commit 0a8ca3619d
2 changed files with 28 additions and 15 deletions

View File

@ -78,6 +78,7 @@ struct _Desktop
GdkRectangle workarea; GdkRectangle workarea;
/* icons */ /* icons */
GtkIconTheme * theme;
unsigned int icons_size; unsigned int icons_size;
DesktopIconWindow ** icons; DesktopIconWindow ** icons;
size_t icons_cnt; size_t icons_cnt;
@ -114,7 +115,6 @@ struct _Desktop
GdkWindow * root; GdkWindow * root;
GtkWidget * desktop; GtkWidget * desktop;
GdkWindow * back; GdkWindow * back;
GtkIconTheme * theme;
#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 0, 0)
cairo_t * cairo; cairo_t * cairo;
#else #else
@ -277,7 +277,6 @@ Desktop * desktop_new(DesktopPrefs * prefs)
return NULL; return NULL;
} }
/* internal */ /* internal */
desktop->theme = gtk_icon_theme_get_default();
desktop_message_register(NULL, DESKTOP_CLIENT_MESSAGE, _on_message, desktop_message_register(NULL, DESKTOP_CLIENT_MESSAGE, _on_message,
desktop); desktop);
/* query the root window */ /* query the root window */
@ -327,6 +326,7 @@ static void _new_icons(Desktop * desktop)
char const ** p; char const ** p;
GdkPixbuf * icon; GdkPixbuf * icon;
desktop->theme = gtk_icon_theme_get_default();
for(p = file, icon = NULL; *p != NULL && icon == NULL; p++) for(p = file, icon = NULL; *p != NULL && icon == NULL; p++)
icon = gtk_icon_theme_load_icon(desktop->theme, *p, icon = gtk_icon_theme_load_icon(desktop->theme, *p,
desktop->icons_size, 0, NULL); desktop->icons_size, 0, NULL);
@ -592,14 +592,14 @@ void desktop_delete(Desktop * desktop)
{ {
size_t i; size_t i;
if(desktop->handler != NULL)
desktophandler_delete(desktop->handler);
if(desktop->folder != NULL) if(desktop->folder != NULL)
g_object_unref(desktop->folder); g_object_unref(desktop->folder);
if(desktop->file != NULL) if(desktop->file != NULL)
g_object_unref(desktop->file); g_object_unref(desktop->file);
if(desktop->mime != NULL) if(desktop->mime != NULL)
mime_delete(desktop->mime); mime_delete(desktop->mime);
if(desktop->handler != NULL)
desktop_set_icons(desktop, DESKTOP_ICONS_NONE);
if(desktop->desktop != NULL) if(desktop->desktop != NULL)
gtk_widget_destroy(desktop->desktop); gtk_widget_destroy(desktop->desktop);
if(desktop->refresh_source != 0) if(desktop->refresh_source != 0)
@ -900,6 +900,8 @@ int desktop_serror(Desktop * desktop, char const * message, int ret)
/* desktop_refresh */ /* desktop_refresh */
static void _refresh_reset(Desktop * desktop); static void _refresh_reset(Desktop * desktop);
/* callbacks */
static gboolean _refresh_on_idle(gpointer data);
void desktop_refresh(Desktop * desktop) void desktop_refresh(Desktop * desktop)
{ {
@ -907,12 +909,8 @@ void desktop_refresh(Desktop * desktop)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
if(desktop->refresh_source != 0) if(desktop->refresh_source != 0)
{
g_source_remove(desktop->refresh_source); g_source_remove(desktop->refresh_source);
desktop->refresh_source = 0; desktop->refresh_source = g_idle_add(_refresh_on_idle, desktop);
}
_refresh_reset(desktop);
desktophandler_refresh(desktop->handler);
} }
static void _refresh_reset(Desktop * desktop) static void _refresh_reset(Desktop * desktop)
@ -928,6 +926,17 @@ static void _refresh_reset(Desktop * desktop)
} }
} }
/* callbacks */
static gboolean _refresh_on_idle(gpointer data)
{
Desktop * desktop = data;
desktop->refresh_source = 0;
_refresh_reset(desktop);
desktophandler_refresh(desktop->handler);
return FALSE;
}
/* desktop_reset */ /* desktop_reset */
static void _reset_background(Desktop * desktop, Config * config); static void _reset_background(Desktop * desktop, Config * config);

View File

@ -181,6 +181,7 @@ void desktophandler_set_icons(DesktopHandler * handler, DesktopIcons icons)
{ {
if(handler->icons != icons) if(handler->icons != icons)
{ {
desktop_cleanup(handler->desktop);
_set_icons_destroy(handler); _set_icons_destroy(handler);
handler->icons = icons; handler->icons = icons;
_set_icons_init(handler); _set_icons_init(handler);
@ -389,6 +390,7 @@ static gboolean _desktophandler_applications_on_refresh(gpointer data)
static gboolean _applications_on_refresh_done(DesktopHandler * handler) static gboolean _applications_on_refresh_done(DesktopHandler * handler)
{ {
handler->u.applications.refresh_source = 0;
_applications_on_refresh_done_applications(handler); _applications_on_refresh_done_applications(handler);
desktop_cleanup(handler->desktop); desktop_cleanup(handler->desktop);
desktop_icons_align(handler->desktop); desktop_icons_align(handler->desktop);
@ -710,6 +712,7 @@ static gboolean _desktophandler_categories_on_refresh(gpointer data)
static gboolean _categories_on_refresh_done(DesktopHandler * handler) static gboolean _categories_on_refresh_done(DesktopHandler * handler)
{ {
handler->u.categories.refresh_source = 0;
_categories_on_refresh_done_categories(handler); _categories_on_refresh_done_categories(handler);
desktop_cleanup(handler->desktop); desktop_cleanup(handler->desktop);
desktop_icons_align(handler->desktop); desktop_icons_align(handler->desktop);
@ -964,15 +967,18 @@ static void _desktophandler_files_init(DesktopHandler * handler)
handler->u.files.path = string_new_append( handler->u.files.path = string_new_append(
desktop_get_home(handler->desktop), "/", desktop_get_home(handler->desktop), "/",
DESKTOP, NULL); DESKTOP, NULL);
handler->u.files.refresh_dir = NULL;
handler->u.files.refresh_mtime = 0;
handler->u.files.refresh_source = 0;
handler->u.files.menu = NULL;
/* FIXME let it be configured again */
handler->u.files.show_hidden = FALSE;
/* check for errors */
if(handler->u.files.path == NULL) if(handler->u.files.path == NULL)
{ {
desktop_error(handler->desktop, NULL, error_get(NULL), 1); desktop_error(handler->desktop, NULL, error_get(NULL), 1);
return; return;
} }
handler->u.files.refresh_dir = NULL;
handler->u.files.refresh_mtime = 0;
handler->u.files.refresh_source = 0;
handler->u.files.menu = NULL;
_files_init_add_home(handler); _files_init_add_home(handler);
if(browser_vfs_stat(handler->u.files.path, &st) == 0) if(browser_vfs_stat(handler->u.files.path, &st) == 0)
{ {
@ -985,8 +991,6 @@ static void _desktophandler_files_init(DesktopHandler * handler)
} }
else if(errno != ENOENT) else if(errno != ENOENT)
desktop_perror(NULL, handler->u.files.path, 1); desktop_perror(NULL, handler->u.files.path, 1);
/* FIXME let it be configured again */
handler->u.files.show_hidden = FALSE;
} }
static int _files_init_add_home(DesktopHandler * handler) static int _files_init_add_home(DesktopHandler * handler)