Additional fixes for the desktop handlers
This commit is contained in:
parent
178516c424
commit
0a8ca3619d
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user