Index: src/xfdesktop-window-icon.c =================================================================== --- src/xfdesktop-window-icon.c (revision 26488) +++ src/xfdesktop-window-icon.c (working copy) @@ -26,8 +26,9 @@ #include #endif +#include +#include #include -#include #include "xfdesktop-window-icon.h" @@ -37,7 +38,7 @@ GdkPixbuf *pix; gint cur_pix_size; gchar *label; - NetkWindow *window; + WnckWindow *window; }; static void xfdesktop_window_icon_class_init(XfdesktopWindowIconClass *klass); @@ -52,9 +53,9 @@ static gboolean xfdesktop_window_icon_populate_context_menu(XfdesktopIcon *icon, GtkWidget *menu); -static void xfdesktop_window_name_changed_cb(NetkWindow *window, +static void xfdesktop_window_name_changed_cb(WnckWindow *window, gpointer user_data); -static void xfdesktop_window_icon_changed_cb(NetkWindow *window, +static void xfdesktop_window_icon_changed_cb(WnckWindow *window, gpointer user_data); @@ -66,11 +67,11 @@ { GObjectClass *gobject_class = (GObjectClass *)klass; XfdesktopIconClass *icon_class = (XfdesktopIconClass *)klass; - + g_type_class_add_private(klass, sizeof(XfdesktopWindowIconPrivate)); - + gobject_class->finalize = xfdesktop_window_icon_finalize; - + icon_class->peek_pixbuf = xfdesktop_window_icon_peek_pixbuf; icon_class->peek_label = xfdesktop_window_icon_peek_label; icon_class->activated = xfdesktop_window_icon_activated; @@ -90,12 +91,12 @@ XfdesktopWindowIcon *icon = XFDESKTOP_WINDOW_ICON(obj); gchar data_name[256]; guint16 row, col; - + if(icon->priv->pix) g_object_unref(G_OBJECT(icon->priv->pix)); - + g_free(icon->priv->label); - + /* save previous position */ if(xfdesktop_icon_get_position(XFDESKTOP_ICON(icon), &row, &col)) { g_snprintf(data_name, 256, "--xfdesktop-last-row-%d", @@ -107,42 +108,42 @@ g_object_set_data(G_OBJECT(icon->priv->window), data_name, GUINT_TO_POINTER(col + 1)); } - + g_signal_handlers_disconnect_by_func(G_OBJECT(icon->priv->window), G_CALLBACK(xfdesktop_window_name_changed_cb), icon); g_signal_handlers_disconnect_by_func(G_OBJECT(icon->priv->window), G_CALLBACK(xfdesktop_window_icon_changed_cb), icon); - + G_OBJECT_CLASS(xfdesktop_window_icon_parent_class)->finalize(obj); } static void -xfdesktop_window_name_changed_cb(NetkWindow *window, +xfdesktop_window_name_changed_cb(WnckWindow *window, gpointer user_data) { XfdesktopWindowIcon *icon = user_data; - + g_free(icon->priv->label); icon->priv->label = NULL; - + xfdesktop_icon_label_changed(XFDESKTOP_ICON(icon)); } static void -xfdesktop_window_icon_changed_cb(NetkWindow *window, +xfdesktop_window_icon_changed_cb(WnckWindow *window, gpointer user_data) { XfdesktopWindowIcon *icon = user_data; - + if(icon->priv->pix) { g_object_unref(G_OBJECT(icon->priv->pix)); icon->priv->pix = NULL; } - + xfdesktop_icon_label_changed(XFDESKTOP_ICON(icon)); } @@ -155,12 +156,12 @@ gint size) { XfdesktopWindowIcon *window_icon = XFDESKTOP_WINDOW_ICON(icon); - + if(!window_icon->priv->pix || window_icon->priv->cur_pix_size != size) { if(window_icon->priv->pix) g_object_unref(G_OBJECT(window_icon->priv->pix)); - - window_icon->priv->pix = netk_window_get_icon(window_icon->priv->window); + + window_icon->priv->pix = wnck_window_get_icon(window_icon->priv->window); if(window_icon->priv->pix) { if(gdk_pixbuf_get_width(window_icon->priv->pix) != size) { window_icon->priv->pix = gdk_pixbuf_scale_simple(window_icon->priv->pix, @@ -172,7 +173,7 @@ window_icon->priv->cur_pix_size = size; } } - + return window_icon->priv->pix; } @@ -180,10 +181,10 @@ xfdesktop_window_icon_peek_label(XfdesktopIcon *icon) { XfdesktopWindowIcon *window_icon = XFDESKTOP_WINDOW_ICON(icon); - + if(!window_icon->priv->label) - window_icon->priv->label = g_strdup(netk_window_get_name(window_icon->priv->window)); - + window_icon->priv->label = g_strdup(wnck_window_get_name(window_icon->priv->window)); + return window_icon->priv->label; } @@ -191,9 +192,9 @@ xfdesktop_window_icon_activated(XfdesktopIcon *icon) { XfdesktopWindowIcon *window_icon = XFDESKTOP_WINDOW_ICON(icon); - - netk_window_activate(window_icon->priv->window); - + + wnck_window_activate(window_icon->priv->window, GDK_CURRENT_TIME); + return TRUE; } @@ -202,9 +203,9 @@ GtkWidget *menu) { XfdesktopWindowIcon *window_icon = XFDESKTOP_WINDOW_ICON(icon); - GtkWidget *amenu = netk_create_window_action_menu(window_icon->priv->window); + GtkWidget *amenu = wnck_create_window_action_menu(window_icon->priv->window); GList *items, *l; - + /* this is unfortunately slightly retarded */ items = gtk_container_get_children(GTK_CONTAINER(amenu)); for(l = items; l; l = l->next) { @@ -216,26 +217,26 @@ } g_list_free(items); gtk_widget_destroy(amenu); - + if(!items) return FALSE; - + return TRUE; } XfdesktopWindowIcon * -xfdesktop_window_icon_new(NetkWindow *window, +xfdesktop_window_icon_new(WnckWindow *window, gint workspace) { XfdesktopWindowIcon *icon = g_object_new(XFDESKTOP_TYPE_WINDOW_ICON, NULL); gchar data_name[256]; gint row, col; - + icon->priv->window = window; icon->priv->workspace = workspace; - + /* check for availability of old position (if any) */ g_snprintf(data_name, 256, "--xfdesktop-last-row-%d", workspace); row = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(window), @@ -245,14 +246,14 @@ data_name)); if(row > 0 && col > 0) xfdesktop_icon_set_position(XFDESKTOP_ICON(icon), row - 1, col - 1); - + g_signal_connect(G_OBJECT(window), "name-changed", G_CALLBACK(xfdesktop_window_name_changed_cb), icon); g_signal_connect(G_OBJECT(window), "icon-changed", G_CALLBACK(xfdesktop_window_icon_changed_cb), icon); - + return icon; } Index: src/windowlist.c =================================================================== --- src/windowlist.c (revision 26488) +++ src/windowlist.c (working copy) @@ -34,8 +34,9 @@ #include #endif +#include #include - +#include #include #include @@ -86,11 +87,11 @@ static void activate_window(GtkWidget *w, gpointer user_data) { - NetkWindow *netk_window = user_data; - - if(!netk_window_is_sticky(netk_window)) - netk_workspace_activate(netk_window_get_workspace(netk_window)); - netk_window_activate(netk_window); + WnckWindow *wnck_window = user_data; + + if(!wnck_window_is_sticky(wnck_window)) + wnck_workspace_activate(wnck_window_get_workspace(wnck_window), GDK_CURRENT_TIME); + wnck_window_activate(wnck_window, GDK_CURRENT_TIME); } static void @@ -98,7 +99,7 @@ { GtkWidget *mi = data; GtkWidget *menu = gtk_widget_get_parent(mi); - + if(mi && menu) gtk_container_remove(GTK_CONTAINER(menu), mi); } @@ -129,40 +130,40 @@ } static GtkWidget * -menu_item_from_netk_window(NetkWindow *netk_window, gint icon_width, +menu_item_from_wnck_window(WnckWindow *wnck_window, gint icon_width, gint icon_height) { GtkWidget *mi, *img = NULL; gchar *title; - NetkScreen *netk_screen; - NetkWorkspace *netk_workspace, *active_workspace; + WnckScreen *wnck_screen; + WnckWorkspace *wnck_workspace, *active_workspace; GString *label; GdkPixbuf *icon, *tmp; gint w, h; gboolean truncated = FALSE; - title = g_markup_escape_text(netk_window_get_name(netk_window), -1); + title = g_markup_escape_text(wnck_window_get_name(wnck_window), -1); if(!title) return NULL; label = g_string_new(title); g_free(title); - netk_screen = netk_window_get_screen(netk_window); - active_workspace = netk_screen_get_active_workspace(netk_screen); - netk_workspace = netk_window_get_workspace(netk_window); + wnck_screen = wnck_window_get_screen(wnck_window); + active_workspace = wnck_screen_get_active_workspace(wnck_screen); + wnck_workspace = wnck_window_get_workspace(wnck_window); - if(netk_window_is_active(netk_window)) { + if(wnck_window_is_active(wnck_window)) { g_string_prepend(label, ""); g_string_append(label, ""); } - if(netk_window_is_minimized(netk_window)) { + if(wnck_window_is_minimized(wnck_window)) { g_string_prepend(label, "["); g_string_append(label, "]"); } - + if(show_windowlist_icons) { - icon = netk_window_get_icon(netk_window); + icon = wnck_window_get_icon(wnck_window); w = gdk_pixbuf_get_width(icon); h = gdk_pixbuf_get_height(icon); if(w != icon_width || h != icon_height) { @@ -173,7 +174,7 @@ } else img = gtk_image_new_from_pixbuf(icon); } - + if(img) { mi = gtk_image_menu_item_new_with_label(label->str); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi), img); @@ -184,7 +185,7 @@ gtk_container_forall(GTK_CONTAINER(mi), menulist_set_label_flags, &truncated); - + return mi; } @@ -197,27 +198,27 @@ GdkScreen *gscreen; GList *menu_children; GtkStyle *style; - NetkScreen *netk_screen; + WnckScreen *wnck_screen; gint nworkspaces, i; - NetkWorkspace *active_workspace, *netk_workspace; + WnckWorkspace *active_workspace, *wnck_workspace; gchar *ws_label, *rm_label; const gchar *ws_name = NULL; GList *windows, *l; - NetkWindow *netk_window; + WnckWindow *wnck_window; gint w, h; PangoFontDescription *italic_font_desc; gboolean is_empty_workspace; - + if(!show_windowlist) return; - + italic_font_desc = pango_font_description_from_string("italic"); - + if(gtk_widget_has_screen(GTK_WIDGET(menu))) gscreen = gtk_widget_get_screen(GTK_WIDGET(menu)); else gscreen = gdk_display_get_default_screen(gdk_display_get_default()); - + /* check to see if the menu is empty. if not, add the windowlist to a * submenu */ menu_children = gtk_container_get_children(GTK_CONTAINER(menu)); @@ -225,35 +226,36 @@ GtkWidget *tmpmenu = gtk_menu_new(); gtk_menu_set_screen(GTK_MENU(tmpmenu), gscreen); gtk_widget_show(tmpmenu); - + mi = gtk_separator_menu_item_new(); gtk_widget_show(mi); gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - + mi = gtk_menu_item_new_with_label(_("Window List")); gtk_widget_show(mi); gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - + gtk_menu_item_set_submenu(GTK_MENU_ITEM(mi), tmpmenu); menu = (GtkMenuShell *)tmpmenu; g_list_free(menu_children); } - + gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &w, &h); style = gtk_widget_get_style(GTK_WIDGET(menu)); - - netk_screen = netk_screen_get(gdk_screen_get_number(gscreen)); - nworkspaces = netk_screen_get_workspace_count(netk_screen); - active_workspace = netk_screen_get_active_workspace(netk_screen); - + + wnck_screen = wnck_screen_get(gdk_screen_get_number(gscreen)); + wnck_screen_force_update (wnck_screen); + nworkspaces = wnck_screen_get_workspace_count(wnck_screen); + active_workspace = wnck_screen_get_active_workspace(wnck_screen); + for(i = 0; i < nworkspaces; i++) { - netk_workspace = netk_screen_get_workspace(netk_screen, i); + wnck_workspace = wnck_screen_get_workspace(wnck_screen, i); submenu = (GtkWidget *)menu; - + if(wl_show_ws_names || wl_submenus) { - ws_name = netk_workspace_get_name(netk_workspace); - - if(netk_workspace == active_workspace) { + ws_name = wnck_workspace_get_name(wnck_workspace); + + if(wnck_workspace == active_workspace) { if(!ws_name || atoi(ws_name) == i+1) ws_label = g_strdup_printf(_("Workspace %d"), i+1); else { @@ -277,7 +279,7 @@ } } } - + mi = gtk_menu_item_new_with_label(ws_label); g_free(ws_label); label = gtk_bin_get_child(GTK_BIN(mi)); @@ -286,10 +288,10 @@ gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); if(!wl_submenus) { g_signal_connect_swapped(G_OBJECT(mi), "activate", - G_CALLBACK(netk_workspace_activate), - netk_workspace); + G_CALLBACK(wnck_workspace_activate), + wnck_workspace); } - + if(wl_submenus) { submenu = gtk_menu_new(); gtk_widget_show(submenu); @@ -300,18 +302,18 @@ gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); } } - - windows = netk_screen_get_windows_stacked(netk_screen); + + windows = wnck_screen_get_windows_stacked(wnck_screen); is_empty_workspace = TRUE; for(l = windows; l; l = l->next) { - netk_window = l->data; - - if((netk_window_get_workspace(netk_window) != netk_workspace - && (!netk_window_is_sticky(netk_window) + wnck_window = l->data; + + if((wnck_window_get_workspace(wnck_window) != wnck_workspace + && (!wnck_window_is_sticky(wnck_window) || (wl_sticky_once - && netk_workspace != active_workspace))) - || netk_window_is_skip_pager(netk_window) - || netk_window_is_skip_tasklist(netk_window)) + && wnck_workspace != active_workspace))) + || wnck_window_is_skip_pager(wnck_window) + || wnck_window_is_skip_tasklist(wnck_window)) { /* the window isn't on the current WS AND isn't sticky, * OR, @@ -321,14 +323,14 @@ */ continue; } - - mi = menu_item_from_netk_window(netk_window, w, h); + + mi = menu_item_from_wnck_window(wnck_window, w, h); if(!mi) continue; is_empty_workspace = FALSE; - if(netk_workspace != active_workspace - && (!netk_window_is_sticky(netk_window) - || netk_workspace != active_workspace)) + if(wnck_workspace != active_workspace + && (!wnck_window_is_sticky(wnck_window) + || wnck_workspace != active_workspace)) { GtkWidget *lbl = gtk_bin_get_child(GTK_BIN(mi)); gtk_widget_modify_fg(lbl, GTK_STATE_NORMAL, @@ -337,29 +339,29 @@ } gtk_widget_show(mi); gtk_menu_shell_append(GTK_MENU_SHELL(submenu), mi); - g_object_weak_ref(G_OBJECT(netk_window), + g_object_weak_ref(G_OBJECT(wnck_window), (GWeakNotify)window_destroyed_cb, mi); g_signal_connect(G_OBJECT(mi), "activate", - G_CALLBACK(activate_window), netk_window); + G_CALLBACK(activate_window), wnck_window); g_signal_connect(G_OBJECT(mi), "destroy", - G_CALLBACK(mi_destroyed_cb), netk_window); + G_CALLBACK(mi_destroyed_cb), wnck_window); } - + if(!wl_submenus && !is_empty_workspace) { mi = gtk_separator_menu_item_new(); gtk_widget_show(mi); gtk_menu_shell_append(GTK_MENU_SHELL(submenu), mi); } } - + pango_font_description_free(italic_font_desc); - + if(wl_submenus) { mi = gtk_separator_menu_item_new(); gtk_widget_show(mi); gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); } - + /* 'add workspace' item */ if(show_windowlist_icons) { img = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_MENU); @@ -371,7 +373,7 @@ gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); g_signal_connect(G_OBJECT(mi), "activate", G_CALLBACK(set_num_workspaces), GINT_TO_POINTER(nworkspaces+1)); - + /* 'remove workspace' item */ if(!ws_name || atoi(ws_name) == nworkspaces) rm_label = g_strdup_printf(_("_Remove Workspace %d"), nworkspaces); @@ -399,7 +401,7 @@ windowlist_init(McsClient *mcs_client) { McsSetting *setting = NULL; - + if(mcs_client) { if(MCS_SUCCESS == mcs_client_get_setting(mcs_client, "showwl", BACKDROP_CHANNEL, &setting)) @@ -408,7 +410,7 @@ mcs_setting_free(setting); setting = NULL; } - + if(MCS_SUCCESS == mcs_client_get_setting(mcs_client, "wl_show_ws_names", BACKDROP_CHANNEL, &setting)) @@ -417,7 +419,7 @@ mcs_setting_free(setting); setting = NULL; } - + if(MCS_SUCCESS == mcs_client_get_setting(mcs_client, "wl_submenus", BACKDROP_CHANNEL, &setting)) @@ -426,7 +428,7 @@ mcs_setting_free(setting); setting = NULL; } - + if(MCS_SUCCESS == mcs_client_get_setting(mcs_client, "wl_sticky_once", BACKDROP_CHANNEL, &setting)) @@ -465,13 +467,13 @@ wl_sticky_once = setting->data.v_int; return TRUE; } - + break; - + case MCS_ACTION_DELETED: break; } - + return FALSE; } Index: src/xfdesktop-window-icon.h =================================================================== --- src/xfdesktop-window-icon.h (revision 26488) +++ src/xfdesktop-window-icon.h (working copy) @@ -51,7 +51,7 @@ GType xfdesktop_window_icon_get_type() G_GNUC_CONST; -XfdesktopWindowIcon *xfdesktop_window_icon_new(NetkWindow *window, +XfdesktopWindowIcon *xfdesktop_window_icon_new(WnckWindow *window, gint workspace); gint xfdesktop_window_icon_get_workspace(XfdesktopWindowIcon *window_icon); Index: src/xfdesktop-window-icon-manager.c =================================================================== --- src/xfdesktop-window-icon-manager.c (revision 26488) +++ src/xfdesktop-window-icon-manager.c (working copy) @@ -29,6 +29,7 @@ #include #include +#include #include "xfdesktop-icon-view.h" #include "xfdesktop-window-icon.h" @@ -66,13 +67,13 @@ struct _XfdesktopWindowIconManagerPrivate { gboolean inited; - + GtkWidget *desktop; XfdesktopIconView *icon_view; - + GdkScreen *gscreen; - NetkScreen *netk_screen; - + WnckScreen *wnck_screen; + gint nworkspaces; gint active_ws_num; XfdesktopWindowIconWorkspace **icon_workspaces; @@ -89,13 +90,13 @@ xfdesktop_window_icon_manager_class_init(XfdesktopWindowIconManagerClass *klass) { GObjectClass *gobject_class = (GObjectClass *)klass; - + g_type_class_add_private(klass, sizeof(XfdesktopWindowIconManagerPrivate)); - + gobject_class->set_property = xfdesktop_window_icon_manager_set_property; gobject_class->get_property = xfdesktop_window_icon_manager_get_property; gobject_class->finalize = xfdesktop_window_icon_manager_finalize; - + g_object_class_install_property(gobject_class, PROP_SCREEN, g_param_spec_object("screen", "GDK Screen", "GDK Screen this icon manager manages", @@ -119,13 +120,13 @@ GParamSpec *pspec) { XfdesktopWindowIconManager *wmanager = XFDESKTOP_WINDOW_ICON_MANAGER(object); - + switch(property_id) { case PROP_SCREEN: wmanager->priv->gscreen = g_value_peek_pointer(value); - wmanager->priv->netk_screen = netk_screen_get(gdk_screen_get_number(wmanager->priv->gscreen)); + wmanager->priv->wnck_screen = wnck_screen_get(gdk_screen_get_number(wmanager->priv->gscreen)); break; - + default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); } @@ -138,12 +139,12 @@ GParamSpec *pspec) { XfdesktopWindowIconManager *wmanager = XFDESKTOP_WINDOW_ICON_MANAGER(object); - + switch(property_id) { case PROP_SCREEN: g_value_set_object(value, wmanager->priv->gscreen); break; - + default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); } @@ -153,12 +154,12 @@ xfdesktop_window_icon_manager_finalize(GObject *obj) { XfdesktopWindowIconManager *wmanager = XFDESKTOP_WINDOW_ICON_MANAGER(obj); - + TRACE("entering"); - + if(wmanager->priv->inited) xfdesktop_window_icon_manager_fini(XFDESKTOP_ICON_VIEW_MANAGER(wmanager)); - + G_OBJECT_CLASS(xfdesktop_window_icon_manager_parent_class)->finalize(obj); } @@ -176,7 +177,7 @@ { XfdesktopWindowIconManager *wmanager = user_data; GList *selected; - + selected = xfdesktop_icon_view_get_selected_items(icon_view); if(selected) { XfdesktopWindowIcon *window_icon = XFDESKTOP_WINDOW_ICON(selected->data); @@ -188,18 +189,18 @@ static XfdesktopWindowIcon * xfdesktop_window_icon_manager_add_icon(XfdesktopWindowIconManager *wmanager, - NetkWindow *window, + WnckWindow *window, gint ws_num) { XfdesktopWindowIcon *icon = xfdesktop_window_icon_new(window, ws_num); - + g_hash_table_insert(wmanager->priv->icon_workspaces[ws_num]->icons, window, icon); - + if(ws_num == wmanager->priv->active_ws_num) xfdesktop_icon_view_add_item(wmanager->priv->icon_view, XFDESKTOP_ICON(icon)); - + return icon; } @@ -214,40 +215,40 @@ } static void -workspace_changed_cb(NetkScreen *netk_screen, +workspace_changed_cb(WnckScreen *wnck_screen, gpointer user_data) { XfdesktopWindowIconManager *wmanager = XFDESKTOP_WINDOW_ICON_MANAGER(user_data); gint n; - NetkWorkspace *ws; - - ws = netk_screen_get_active_workspace(wmanager->priv->netk_screen); - if(!NETK_IS_WORKSPACE(ws)) { - DBG("got weird failure of netk_screen_get_active_workspace(), bailing"); + WnckWorkspace *ws; + + ws = wnck_screen_get_active_workspace(wmanager->priv->wnck_screen); + if(!WNCK_IS_WORKSPACE(ws)) { + DBG("got weird failure of wnck_screen_get_active_workspace(), bailing"); return; } - + xfdesktop_icon_view_remove_all(wmanager->priv->icon_view); - - wmanager->priv->active_ws_num = n = netk_workspace_get_number(ws); - + + wmanager->priv->active_ws_num = n = wnck_workspace_get_number(ws); + if(!wmanager->priv->icon_workspaces[n]->icons) { GList *windows, *l; - + wmanager->priv->icon_workspaces[n]->icons = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)g_object_unref); - - windows = netk_screen_get_windows(wmanager->priv->netk_screen); + + windows = wnck_screen_get_windows(wmanager->priv->wnck_screen); for(l = windows; l; l = l->next) { - NetkWindow *window = l->data; - - if((ws == netk_window_get_workspace(window) - || netk_window_is_pinned(window)) - && netk_window_is_minimized(window) - && !netk_window_is_skip_tasklist(window)) + WnckWindow *window = l->data; + + if((ws == wnck_window_get_workspace(window) + || wnck_window_is_pinned(window)) + && wnck_window_is_minimized(window) + && !wnck_window_is_skip_tasklist(window)) { xfdesktop_window_icon_manager_add_icon(wmanager, window, n); @@ -256,7 +257,7 @@ } else g_hash_table_foreach(wmanager->priv->icon_workspaces[n]->icons, xfdesktop_add_window_icons_foreach, wmanager); - + if(wmanager->priv->icon_workspaces[n]->selected_icon) { xfdesktop_icon_view_select_item(wmanager->priv->icon_view, XFDESKTOP_ICON(wmanager->priv->icon_workspaces[n]->selected_icon)); @@ -264,33 +265,33 @@ } static void -workspace_created_cb(NetkScreen *netk_screen, - NetkWorkspace *workspace, +workspace_created_cb(WnckScreen *wnck_screen, + WnckWorkspace *workspace, gpointer user_data) { XfdesktopWindowIconManager *wmanager = user_data; gint ws_num, n_ws; - - n_ws = netk_screen_get_workspace_count(netk_screen); + + n_ws = wnck_screen_get_workspace_count(wnck_screen); wmanager->priv->nworkspaces = n_ws; - ws_num = netk_workspace_get_number(workspace); - + ws_num = wnck_workspace_get_number(workspace); + wmanager->priv->icon_workspaces = g_realloc(wmanager->priv->icon_workspaces, sizeof(gpointer) * n_ws); - + if(ws_num != n_ws - 1) { g_memmove(wmanager->priv->icon_workspaces + ws_num + 1, wmanager->priv->icon_workspaces + ws_num, sizeof(gpointer) * (n_ws - ws_num - 1)); } - + wmanager->priv->icon_workspaces[ws_num] = g_new0(XfdesktopWindowIconWorkspace, 1); } static void -workspace_destroyed_cb(NetkScreen *netk_screen, - NetkWorkspace *workspace, +workspace_destroyed_cb(WnckScreen *wnck_screen, + WnckWorkspace *workspace, gpointer user_data) { /* TODO: check if we get workspace-destroyed before or after all the @@ -298,65 +299,65 @@ * for each one. preferably that is the case. */ XfdesktopWindowIconManager *wmanager = user_data; gint ws_num, n_ws; - - n_ws = netk_screen_get_workspace_count(netk_screen); + + n_ws = wnck_screen_get_workspace_count(wnck_screen); wmanager->priv->nworkspaces = n_ws; - ws_num = netk_workspace_get_number(workspace); - + ws_num = wnck_workspace_get_number(workspace); + if(wmanager->priv->icon_workspaces[ws_num]->icons) g_hash_table_destroy(wmanager->priv->icon_workspaces[ws_num]->icons); g_free(wmanager->priv->icon_workspaces[ws_num]); - + if(ws_num != n_ws) { g_memmove(wmanager->priv->icon_workspaces + ws_num, wmanager->priv->icon_workspaces + ws_num + 1, sizeof(gpointer) * (n_ws - ws_num)); } - + wmanager->priv->icon_workspaces = g_realloc(wmanager->priv->icon_workspaces, sizeof(gpointer) * n_ws); } static void -window_state_changed_cb(NetkWindow *window, - NetkWindowState changed_mask, - NetkWindowState new_state, +window_state_changed_cb(WnckWindow *window, + WnckWindowState changed_mask, + WnckWindowState new_state, gpointer user_data) { XfdesktopWindowIconManager *wmanager = user_data; - NetkWorkspace *ws; + WnckWorkspace *ws; gint ws_num = -1, i, max_i; gboolean is_add = FALSE; XfdesktopWindowIcon *icon; - + TRACE("entering"); - - if(!(changed_mask & (NETK_WINDOW_STATE_MINIMIZED | - NETK_WINDOW_STATE_SKIP_TASKLIST))) + + if(!(changed_mask & (WNCK_WINDOW_STATE_MINIMIZED | + WNCK_WINDOW_STATE_SKIP_TASKLIST))) { return; } - + DBG("changed_mask indicates an action"); - - ws = netk_window_get_workspace(window); + + ws = wnck_window_get_workspace(window); if(ws) - ws_num = netk_workspace_get_number(ws); - - if( (changed_mask & NETK_WINDOW_STATE_MINIMIZED - && new_state & NETK_WINDOW_STATE_MINIMIZED) - || (changed_mask & NETK_WINDOW_STATE_SKIP_TASKLIST - && !(new_state & NETK_WINDOW_STATE_SKIP_TASKLIST))) + ws_num = wnck_workspace_get_number(ws); + + if( (changed_mask & WNCK_WINDOW_STATE_MINIMIZED + && new_state & WNCK_WINDOW_STATE_MINIMIZED) + || (changed_mask & WNCK_WINDOW_STATE_SKIP_TASKLIST + && !(new_state & WNCK_WINDOW_STATE_SKIP_TASKLIST))) { is_add = TRUE; } - + DBG("is_add == %s", is_add?"TRUE":"FALSE"); - + /* this is a cute way of handling adding/removing from *all* workspaces * when we're dealing with a sticky windows, and just adding/removing * from a single workspace otherwise, without duplicating code */ - if(netk_window_is_pinned(window)) { + if(wnck_window_is_pinned(window)) { i = 0; max_i = wmanager->priv->nworkspaces; } else { @@ -364,7 +365,7 @@ i = ws_num; max_i = i + 1; } - + if(is_add) { for(; i < max_i; i++) { TRACE("loop: %d", i); @@ -374,7 +375,7 @@ { continue; } - + DBG("adding to WS %d", i); xfdesktop_window_icon_manager_add_icon(wmanager, window, i); } @@ -383,7 +384,7 @@ TRACE("loop: %d", i); if(!wmanager->priv->icon_workspaces[i]->icons) continue; - + icon = g_hash_table_lookup(wmanager->priv->icon_workspaces[i]->icons, window); if(icon) { @@ -402,32 +403,32 @@ } static void -window_workspace_changed_cb(NetkWindow *window, +window_workspace_changed_cb(WnckWindow *window, gpointer user_data) { XfdesktopWindowIconManager *wmanager = user_data; - NetkWorkspace *new_ws; + WnckWorkspace *new_ws; gint i, new_ws_num = -1, n_ws; XfdesktopIcon *icon; - + TRACE("entering"); - - if(!netk_window_is_minimized(window)) + + if(!wnck_window_is_minimized(window)) return; - + n_ws = wmanager->priv->nworkspaces; - - new_ws = netk_window_get_workspace(window); + + new_ws = wnck_window_get_workspace(window); if(new_ws) - new_ws_num = netk_workspace_get_number(new_ws); - + new_ws_num = wnck_workspace_get_number(new_ws); + for(i = 0; i < n_ws; i++) { if(!wmanager->priv->icon_workspaces[i]->icons) continue; - + icon = g_hash_table_lookup(wmanager->priv->icon_workspaces[i]->icons, window); - + if(new_ws) { /* window is not sticky */ if(i != new_ws_num && icon) { @@ -452,14 +453,14 @@ GObject *where_the_object_was) { XfdesktopWindowIconManager *wmanager = data; - NetkWindow *window = (NetkWindow *)where_the_object_was; + WnckWindow *window = (WnckWindow *)where_the_object_was; gint i; XfdesktopIcon *icon; - + for(i = 0; i < wmanager->priv->nworkspaces; i++) { if(!wmanager->priv->icon_workspaces[i]->icons) continue; - + icon = g_hash_table_lookup(wmanager->priv->icon_workspaces[i]->icons, window); if(icon) { @@ -476,12 +477,12 @@ } static void -window_created_cb(NetkScreen *netk_screen, - NetkWindow *window, +window_created_cb(WnckScreen *wnck_screen, + WnckWindow *window, gpointer user_data) { XfdesktopWindowIconManager *wmanager = user_data; - + g_signal_connect(G_OBJECT(window), "state-changed", G_CALLBACK(window_state_changed_cb), wmanager); g_signal_connect(G_OBJECT(window), "workspace-changed", @@ -496,10 +497,10 @@ { XfdesktopWindowIconManager *wmanager = XFDESKTOP_WINDOW_ICON_MANAGER(user_data); XfdesktopWindowIconWorkspace *wiws = wmanager->priv->icon_workspaces[wmanager->priv->active_ws_num]; - + if(!wiws->selected_icon) return; - + xfdesktop_icon_populate_context_menu(XFDESKTOP_ICON(wiws->selected_icon), GTK_WIDGET(menu)); } @@ -526,54 +527,54 @@ XfdesktopWindowIconManager *wmanager = XFDESKTOP_WINDOW_ICON_MANAGER(manager); GList *windows, *l; gint i; - + wmanager->priv->icon_view = icon_view; xfdesktop_icon_view_set_selection_mode(icon_view, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(icon_view), "icon-selected", G_CALLBACK(xfdesktop_window_icon_manager_icon_selected_cb), wmanager); - + wmanager->priv->desktop = gtk_widget_get_toplevel(GTK_WIDGET(icon_view)); g_signal_connect(G_OBJECT(wmanager->priv->desktop), "populate-root-menu", G_CALLBACK(xfdesktop_window_icon_manager_populate_context_menu), wmanager); - - netk_screen_force_update(wmanager->priv->netk_screen); - g_signal_connect(G_OBJECT(wmanager->priv->netk_screen), + + wnck_screen_force_update(wmanager->priv->wnck_screen); + g_signal_connect(G_OBJECT(wmanager->priv->wnck_screen), "active-workspace-changed", G_CALLBACK(workspace_changed_cb), wmanager); - g_signal_connect(G_OBJECT(wmanager->priv->netk_screen), "window-opened", + g_signal_connect(G_OBJECT(wmanager->priv->wnck_screen), "window-opened", G_CALLBACK(window_created_cb), wmanager); - g_signal_connect(G_OBJECT(wmanager->priv->netk_screen), "workspace-created", + g_signal_connect(G_OBJECT(wmanager->priv->wnck_screen), "workspace-created", G_CALLBACK(workspace_created_cb), wmanager); - g_signal_connect(G_OBJECT(wmanager->priv->netk_screen), + g_signal_connect(G_OBJECT(wmanager->priv->wnck_screen), "workspace-destroyed", G_CALLBACK(workspace_destroyed_cb), wmanager); - - wmanager->priv->nworkspaces = netk_screen_get_workspace_count(wmanager->priv->netk_screen); - wmanager->priv->active_ws_num = netk_workspace_get_number(netk_screen_get_active_workspace(wmanager->priv->netk_screen)); + + wmanager->priv->nworkspaces = wnck_screen_get_workspace_count(wmanager->priv->wnck_screen); + wmanager->priv->active_ws_num = wnck_workspace_get_number(wnck_screen_get_active_workspace(wmanager->priv->wnck_screen)); wmanager->priv->icon_workspaces = g_malloc0(wmanager->priv->nworkspaces * sizeof(gpointer)); for(i = 0; i < wmanager->priv->nworkspaces; ++i) { wmanager->priv->icon_workspaces[i] = g_new0(XfdesktopWindowIconWorkspace, 1); } - - windows = netk_screen_get_windows(wmanager->priv->netk_screen); + + windows = wnck_screen_get_windows(wmanager->priv->wnck_screen); for(l = windows; l; l = l->next) { - NetkWindow *window = l->data; - + WnckWindow *window = l->data; + g_signal_connect(G_OBJECT(window), "state-changed", G_CALLBACK(window_state_changed_cb), wmanager); g_signal_connect(G_OBJECT(window), "workspace-changed", G_CALLBACK(window_workspace_changed_cb), wmanager); g_object_weak_ref(G_OBJECT(window), window_destroyed_cb, wmanager); } - - workspace_changed_cb(wmanager->priv->netk_screen, wmanager); - + + workspace_changed_cb(wmanager->priv->wnck_screen, wmanager); + wmanager->priv->inited = TRUE; - + return TRUE; } @@ -583,29 +584,29 @@ XfdesktopWindowIconManager *wmanager = XFDESKTOP_WINDOW_ICON_MANAGER(manager); gint i; GList *windows, *l; - + TRACE("entering"); - + wmanager->priv->inited = FALSE; - - g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->netk_screen), + + g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->wnck_screen), G_CALLBACK(workspace_changed_cb), wmanager); - g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->netk_screen), + g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->wnck_screen), G_CALLBACK(window_created_cb), wmanager); - g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->netk_screen), + g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->wnck_screen), G_CALLBACK(workspace_created_cb), wmanager); - g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->netk_screen), + g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->wnck_screen), G_CALLBACK(workspace_destroyed_cb), wmanager); - + g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->desktop), G_CALLBACK(xfdesktop_window_icon_manager_populate_context_menu), wmanager); - - windows = netk_screen_get_windows(wmanager->priv->netk_screen); + + windows = wnck_screen_get_windows(wmanager->priv->wnck_screen); for(l = windows; l; l = l->next) { g_signal_handlers_disconnect_by_func(G_OBJECT(l->data), G_CALLBACK(window_state_changed_cb), @@ -615,12 +616,12 @@ wmanager); g_object_weak_unref(G_OBJECT(l->data), window_destroyed_cb, wmanager); } - + xfdesktop_icon_view_remove_all(wmanager->priv->icon_view); g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->icon_view), G_CALLBACK(xfdesktop_window_icon_manager_icon_selected_cb), wmanager); - + for(i = 0; i < wmanager->priv->nworkspaces; ++i) { if(wmanager->priv->icon_workspaces[i]->icons) g_hash_table_destroy(wmanager->priv->icon_workspaces[i]->icons); Index: src/xfdesktop-icon-view.c =================================================================== --- src/xfdesktop-icon-view.c (revision 26488) +++ src/xfdesktop-icon-view.c (working copy) @@ -28,6 +28,9 @@ #include +#include +#include + #include #include #include @@ -39,6 +42,7 @@ #include "xfdesktop-icon-view.h" +#include #include #define DEFAULT_FONT_SIZE 12 @@ -101,7 +105,7 @@ guint icon_size; guint font_size; - NetkScreen *netk_screen; + WnckScreen *wnck_screen; PangoLayout *playout; GList *pending_icons; Index: src/Makefile.am =================================================================== --- src/Makefile.am (revision 26488) +++ src/Makefile.am (working copy) @@ -51,19 +51,20 @@ xfdesktop_CFLAGS = \ -I$(top_srcdir) \ - -I$(top_srcdir)/common \ + -I$(top_srcdir)/common \ + -DWNCK_I_KNOW_THIS_IS_UNSTABLE \ -DBINDIR=\"$(bindir)\" \ -DLOCALEDIR=\"$(localedir)\" \ -DDATADIR=\"$(datadir)\" \ -DSYSCONFDIR=\"$(sysconfdir)\" \ -DXFCEMODDIR=\"$(libdir)/xfce4/modules\" \ - $(LIBX11_CFLAGS) \ + $(LIBX11_CFLAGS) \ $(GTHREAD_CFLAGS) \ $(GMODULE_CFLAGS) \ $(LIBXFCEGUI4_CFLAGS) \ - $(LIBXFCE4MCS_CLIENT_CFLAGS) + $(LIBXFCE4MCS_CLIENT_CFLAGS) \ + $(LIBWNCK_CFLAGS) - xfdesktop_LDFLAGS = \ -export-dynamic @@ -78,7 +79,8 @@ $(LIBX11_LIBS) \ $(GTHREAD_LIBS) \ $(LIBXFCEGUI4_LIBS) \ - $(LIBXFCE4MCS_CLIENT_LIBS) + $(LIBXFCE4MCS_CLIENT_LIBS) \ + $(LIBWNCK_LIBS) if ENABLE_DESKTOP_ICONS Index: src/xfce-desktop.c =================================================================== --- src/xfce-desktop.c (revision 26488) +++ src/xfce-desktop.c (working copy) @@ -57,6 +57,9 @@ #include #endif +#include +#include + #include #include #include Index: settings/backdrop-list-manager.c =================================================================== --- settings/backdrop-list-manager.c (revision 26487) +++ settings/backdrop-list-manager.c (working copy) @@ -52,6 +52,10 @@ #define PATH_MAX 256 #endif +#include +#include +#include + #include #include #include Index: configure.ac.in =================================================================== --- configure.ac.in (revision 26487) +++ configure.ac.in (working copy) @@ -19,6 +19,7 @@ m4_define([exo_minimum_version], [0.3.2]) m4_define([thunar_minimum_version], [0.8.0]) m4_define([dbus_minimum_version], [0.34]) +m4_define([wnck_minimum_version], [2.12]) m4_define([intltool_minimum_version], [0.31]) m4_define([autoconf_minimum_version], [2.50]) @@ -69,6 +70,7 @@ XDT_CHECK_PACKAGE([LIBXFCEGUI4], [libxfcegui4-1.0], [xfce_minimum_version]) XDT_CHECK_PACKAGE([LIBXFCE4MCS_CLIENT], [libxfce4mcs-client-1.0], [xfce_minimum_version]) +XDT_CHECK_PACKAGE([LIBWNCK], [libwnck-1.0], [wnck_minimum_version]) XDT_XFCE_MCS_PLUGIN([XFCE_MCS_MANAGER], [xfce_minimum_version]) dnl do we want desktop icons at all? @@ -117,7 +119,7 @@ enable_file_icons="no" if test "x$THUNAR_VFS_VERSION" != "x"; then already_have_thunar_vfs=yes - + if test "x$DBUS_VERSION" != "x"; then enable_file_icons="yes" AC_DEFINE([ENABLE_FILE_ICONS], [1],