Updating branch refs/heads/master to 9becad1569798894bdae9beaffc9076338fed299 (commit) from 3b18c3b222314c65789006477a2f0e5e6d9e78c3 (commit)
commit 9becad1569798894bdae9beaffc9076338fed299 Author: Eric Koegel <eric.koe...@gmail.com> Date: Sun Sep 1 15:23:27 2013 +0300 Don't call wnck_screen_force_update Remove the call to wnck_screen_force_update and let wnck initialize during the main idle loop. Also fix a couple memory leaks. src/xfce-desktop.c | 91 ++++++++++++++++++++----------------- src/xfdesktop-file-icon-manager.c | 19 ++++---- src/xfdesktop-icon-view.c | 5 +- 3 files changed, 62 insertions(+), 53 deletions(-) diff --git a/src/xfce-desktop.c b/src/xfce-desktop.c index 149a833..101bcb6 100644 --- a/src/xfce-desktop.c +++ b/src/xfce-desktop.c @@ -312,6 +312,40 @@ set_real_root_window_pixmap(GdkScreen *gscreen, #endif } +static GdkPixmap * +create_bg_pixmap(GdkScreen *gscreen, gpointer user_data) +{ + XfceDesktop *desktop = user_data; + gint w, h; + + TRACE("entering"); + + g_return_val_if_fail(XFCE_IS_DESKTOP(desktop), NULL); + + if(desktop->priv->workspaces == NULL) + return NULL; + + w = gdk_screen_get_width(gscreen); + h = gdk_screen_get_height(gscreen); + gtk_widget_set_size_request(GTK_WIDGET(desktop), w, h); + gtk_window_resize(GTK_WINDOW(desktop), w, h); + + if(desktop->priv->bg_pixmap) + g_object_unref(G_OBJECT(desktop->priv->bg_pixmap)); + desktop->priv->bg_pixmap = gdk_pixmap_new(GDK_DRAWABLE(gtk_widget_get_window(GTK_WIDGET(desktop))), + w, h, -1); + + if(!GDK_IS_PIXMAP(desktop->priv->bg_pixmap)) + return NULL; + + set_real_root_window_pixmap(desktop->priv->gscreen, + desktop->priv->bg_pixmap); + gdk_window_set_back_pixmap(gtk_widget_get_window(GTK_WIDGET(desktop)), + desktop->priv->bg_pixmap, FALSE); + + return desktop->priv->bg_pixmap; +} + static void backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data) { @@ -328,7 +362,14 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data) if(desktop->priv->updates_frozen || !gtk_widget_get_realized(GTK_WIDGET(desktop))) return; - + + if(!GDK_IS_PIXMAP(pmap)) { + pmap = create_bg_pixmap(gscreen, desktop); + + if(!GDK_IS_PIXMAP(pmap)) + return; + } + TRACE("really entering"); current_workspace = xfce_desktop_get_current_workspace(desktop); @@ -454,28 +495,12 @@ static void screen_size_changed_cb(GdkScreen *gscreen, gpointer user_data) { XfceDesktop *desktop = user_data; - gint w, h, current_workspace; + gint current_workspace; TRACE("entering"); - g_return_if_fail(XFCE_IS_DESKTOP(desktop)); - - if(desktop->priv->workspaces == NULL) + if(!create_bg_pixmap(gscreen, desktop)) return; - - w = gdk_screen_get_width(gscreen); - h = gdk_screen_get_height(gscreen); - gtk_widget_set_size_request(GTK_WIDGET(desktop), w, h); - gtk_window_resize(GTK_WINDOW(desktop), w, h); - - if(desktop->priv->bg_pixmap) - g_object_unref(G_OBJECT(desktop->priv->bg_pixmap)); - desktop->priv->bg_pixmap = gdk_pixmap_new(GDK_DRAWABLE(gtk_widget_get_window(GTK_WIDGET(desktop))), - w, h, -1); - set_real_root_window_pixmap(desktop->priv->gscreen, - desktop->priv->bg_pixmap); - gdk_window_set_back_pixmap(gtk_widget_get_window(GTK_WIDGET(desktop)), - desktop->priv->bg_pixmap, FALSE); current_workspace = xfce_desktop_get_current_workspace(desktop); @@ -567,7 +592,7 @@ workspace_changed_cb(WnckScreen *wnck_screen, for(i = 0; i < xfce_desktop_get_n_monitors(desktop); i++) { /* We want to compare the current workspace backdrop with the new one * and see if we can avoid changing them if they are the same image/style */ - if(current_workspace < desktop->priv->nworkspaces) { + if(current_workspace < desktop->priv->nworkspaces && current_workspace >= 0) { current_backdrop = xfce_workspace_get_backdrop(desktop->priv->workspaces[current_workspace], i); new_backdrop = xfce_workspace_get_backdrop(desktop->priv->workspaces[new_workspace], i); @@ -576,7 +601,8 @@ workspace_changed_cb(WnckScreen *wnck_screen, backdrop_changed_cb(new_backdrop, user_data); } } else { - /* If current_workspace was removed, get the new backdrop and apply it */ + /* If current_workspace was removed or never existed, get the new + * backdrop and apply it */ new_backdrop = xfce_workspace_get_backdrop(desktop->priv->workspaces[new_workspace], i); backdrop_changed_cb(new_backdrop, user_data); } @@ -920,7 +946,7 @@ xfce_desktop_realize(GtkWidget *widget) { XfceDesktop *desktop = XFCE_DESKTOP(widget); GdkAtom atom; - gint sw, sh, i; + gint sw, sh; Window xid; GdkWindow *groot; WnckScreen *wnck_screen; @@ -970,7 +996,6 @@ xfce_desktop_realize(GtkWidget *widget) /* We have to force wnck to initialize */ wnck_screen = wnck_screen_get(gdk_screen_get_number(desktop->priv->gscreen)); - wnck_screen_force_update(wnck_screen); desktop->priv->wnck_screen = wnck_screen; xfconf_g_property_bind(desktop->priv->channel, @@ -981,24 +1006,8 @@ xfce_desktop_realize(GtkWidget *widget) SINGLE_WORKSPACE_NUMBER, G_TYPE_INT, G_OBJECT(desktop), "single-workspace-number"); - /* Get the current workspace number */ - desktop->priv->current_workspace = xfce_desktop_get_current_workspace(desktop); - desktop->priv->nworkspaces = wnck_screen_get_workspace_count(wnck_screen); - - desktop->priv->workspaces = g_realloc(desktop->priv->workspaces, - desktop->priv->nworkspaces * sizeof(XfceWorkspace *)); - - for(i = 0; i < desktop->priv->nworkspaces; i++) { - desktop->priv->workspaces[i] = xfce_workspace_new(desktop->priv->gscreen, - desktop->priv->channel, - desktop->priv->property_prefix, - i); - xfce_workspace_monitors_changed(desktop->priv->workspaces[i], - desktop->priv->gscreen); - - g_signal_connect(desktop->priv->workspaces[i], "workspace-backdrop-changed", - G_CALLBACK(workspace_backdrop_changed_cb), desktop); - } + /* Start with an invalid workspace so it updates */ + desktop->priv->current_workspace = -1; g_signal_connect(desktop->priv->wnck_screen, "active-workspace-changed", G_CALLBACK(workspace_changed_cb), desktop); diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c index d7db8c6..155be45 100644 --- a/src/xfdesktop-file-icon-manager.c +++ b/src/xfdesktop-file-icon-manager.c @@ -416,7 +416,10 @@ xfdesktop_file_icon_manager_finalize(GObject *obj) g_object_unref(fmanager->priv->folder); g_object_unref(fmanager->priv->thumbnailer); - + + if(fmanager->priv->volume_monitor != NULL) + g_object_unref(fmanager->priv->volume_monitor); + G_OBJECT_CLASS(xfdesktop_file_icon_manager_parent_class)->finalize(obj); } @@ -537,6 +540,8 @@ xfdesktop_file_icon_manager_check_create_desktop_folder(GFile *folder) } } + g_object_unref(info); + return result; } @@ -2263,8 +2268,7 @@ xfdesktop_file_icon_manager_file_changed(GFileMonitor *monitor, switch(event) { case G_FILE_MONITOR_EVENT_MOVED: - DBG("got a moved event, old filename: %s new filename: %s", - g_file_get_path(file), g_file_get_path(other_file)); + DBG("got a moved event"); icon = g_hash_table_lookup(fmanager->priv->icons, file); if(!icon) { @@ -2305,7 +2309,7 @@ xfdesktop_file_icon_manager_file_changed(GFileMonitor *monitor, break; case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED: case G_FILE_MONITOR_EVENT_CHANGED: - DBG("got changed event: %s", g_file_get_path(file)); + DBG("got changed event"); icon = g_hash_table_lookup(fmanager->priv->icons, file); if(icon) { @@ -2679,12 +2683,8 @@ xfdesktop_file_icon_manager_load_removable_media(XfdesktopFileIconManager *fmana if(fmanager->priv->removable_icons) return; - if(!fmanager->priv->volume_monitor) { + if(!fmanager->priv->volume_monitor) fmanager->priv->volume_monitor = g_volume_monitor_get(); - g_object_add_weak_pointer(G_OBJECT(fmanager->priv->volume_monitor), - (gpointer)&fmanager->priv->volume_monitor); - } else - g_object_ref(G_OBJECT(fmanager->priv->volume_monitor)); fmanager->priv->removable_icons = g_hash_table_new_full(g_direct_hash, g_direct_equal, @@ -2745,6 +2745,7 @@ xfdesktop_file_icon_manager_remove_removable_media(XfdesktopFileIconManager *fma fmanager); g_object_unref(fmanager->priv->volume_monitor); + fmanager->priv->volume_monitor = NULL; } } diff --git a/src/xfdesktop-icon-view.c b/src/xfdesktop-icon-view.c index ac97f20..b7fecaa 100644 --- a/src/xfdesktop-icon-view.c +++ b/src/xfdesktop-icon-view.c @@ -1913,7 +1913,8 @@ xfdesktop_icon_view_realize(GtkWidget *widget) pctx = gtk_widget_get_pango_context(GTK_WIDGET(icon_view)); icon_view->priv->playout = pango_layout_new(pctx); - + g_object_unref(pctx); + if(icon_view->priv->font_size > 0) { xfdesktop_icon_view_modify_font_size(icon_view, icon_view->priv->font_size); @@ -2806,7 +2807,6 @@ xfdesktop_icon_view_setup_pango_layout(XfdesktopIconView *icon_view, PangoLayout *playout) { const gchar *label = xfdesktop_icon_peek_label(icon); - PangoRectangle prect; g_return_if_fail(XFDESKTOP_IS_ICON_VIEW(icon_view) && XFDESKTOP_IS_ICON(icon)); @@ -2816,7 +2816,6 @@ xfdesktop_icon_view_setup_pango_layout(XfdesktopIconView *icon_view, pango_layout_set_width(playout, TEXT_WIDTH * PANGO_SCALE); pango_layout_set_text(playout, label, -1); - pango_layout_get_pixel_extents(playout, NULL, &prect); if(!xfdesktop_icon_view_is_icon_selected(icon_view, icon) && icon_view->priv->ellipsize_icon_labels) { /* constrain the text area */ _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits