[Xfce4-commits] <xfdesktop:master> Made changes so that DISABLE_DEPRECATED and GSEAL flags can be enabled.
Eric Koegel
noreply at xfce.org
Fri Jan 25 12:36:01 CET 2013
Updating branch refs/heads/master
to 26b9e349bc3497922318bbc5940075d0c497cc8a (commit)
from 8392598a7a549370a37c1d7a59cd64c4ca7a9329 (commit)
commit 26b9e349bc3497922318bbc5940075d0c497cc8a
Author: Eric Koegel <eric.koegel at gmail.com>
Date: Sun Dec 23 09:18:09 2012 +0300
Made changes so that DISABLE_DEPRECATED and GSEAL flags can be enabled.
common/xfdesktop-common.c | 6 +-
settings/main.c | 23 ++-
src/main.c | 7 +-
src/windowlist.c | 6 +-
src/xfce-backdrop.c | 4 +-
src/xfce-desktop.c | 60 +++---
src/xfdesktop-clipboard-manager.c | 26 ++-
src/xfdesktop-file-icon-manager.c | 42 +++--
src/xfdesktop-file-utils.c | 4 +-
src/xfdesktop-icon-view.c | 351 ++++++++++++++++++++++---------------
10 files changed, 307 insertions(+), 222 deletions(-)
diff --git a/common/xfdesktop-common.c b/common/xfdesktop-common.c
index 64aee8d..34942a5 100644
--- a/common/xfdesktop-common.c
+++ b/common/xfdesktop-common.c
@@ -316,9 +316,9 @@ xfdesktop_check_is_running(Window *xid)
xscreen = 0;
g_snprintf(selection_name, 100, XFDESKTOP_SELECTION_FMT, xscreen);
- selection_atom = XInternAtom(GDK_DISPLAY(), selection_name, False);
+ selection_atom = XInternAtom(gdk_x11_get_default_xdisplay(), selection_name, False);
- if((*xid = XGetSelectionOwner(GDK_DISPLAY(), selection_atom)))
+ if((*xid = XGetSelectionOwner(gdk_x11_get_default_xdisplay(), selection_atom)))
return TRUE;
return FALSE;
@@ -334,7 +334,7 @@ xfdesktop_send_client_message(Window xid, const gchar *msg)
gtk_widget_realize(win);
gev.type = GDK_CLIENT_EVENT;
- gev.window = win->window;
+ gev.window = gtk_widget_get_window(win);
gev.send_event = TRUE;
gev.message_type = gdk_atom_intern("STRING", FALSE);
gev.data_format = 8;
diff --git a/settings/main.c b/settings/main.c
index f4ded70..743398d 100644
--- a/settings/main.c
+++ b/settings/main.c
@@ -42,6 +42,7 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
#include <libxfce4util/libxfce4util.h>
#include <xfconf/xfconf.h>
@@ -743,7 +744,8 @@ xfdesktop_settings_dialog_populate_image_list(AppearancePanel *panel)
/* generate previews of each image -- the new thread will own
* the reference on the list store, so let's not unref it here */
- if(!g_thread_create(xfdesktop_settings_create_all_previews, ls, FALSE, NULL)) {
+ if(!g_thread_try_new("xfdesktop_settings_create_all_previews",
+ xfdesktop_settings_create_all_previews, ls, NULL)) {
g_critical("Failed to spawn thread; backdrop previews will be unavailable.");
g_object_unref(G_OBJECT(ls));
}
@@ -938,8 +940,9 @@ add_file_button_clicked(GtkWidget *button,
g_slist_free(filenames);
if(!pdata->iters
- || !g_thread_create(xfdesktop_settings_create_some_previews,
- pdata, FALSE, NULL))
+ || !g_thread_try_new("xfdesktop_settings_create_some_previews",
+ xfdesktop_settings_create_some_previews,
+ pdata, NULL))
{
if(pdata->iters)
g_critical("Unable to create thread for single image preview.");
@@ -1172,14 +1175,15 @@ image_treeview_drag_data_received(GtkWidget *widget,
pdata->model = g_object_ref(G_OBJECT(model));
if(TARGET_TEXT_URI_LIST != info
- || selection_data->format != 8
- || selection_data->length <= 0)
+ || gtk_selection_data_get_format(selection_data) != 8
+ || gtk_selection_data_get_length(selection_data) <= 0)
{
gtk_drag_finish(context, FALSE, FALSE, time_);
+ g_free(pdata);
return;
}
- p = (gchar *)selection_data->data;
+ p = (gchar *)gtk_selection_data_get_data(selection_data);
while(*p) {
if(*p != '#') {
gchar *q;
@@ -1251,8 +1255,9 @@ image_treeview_drag_data_received(GtkWidget *widget,
file_added = !!pdata->iters;
if(!pdata->iters
- || !g_thread_create(xfdesktop_settings_create_some_previews,
- pdata, FALSE, NULL))
+ || !g_thread_try_new("xfdesktop_settings_create_some_previews",
+ xfdesktop_settings_create_some_previews,
+ pdata, NULL))
{
if(pdata->iters)
g_critical("Unable to create thread for single image preview.");
@@ -1718,7 +1723,7 @@ main(int argc, char **argv)
gtk_window_present(GTK_WINDOW (dialog));
/* To prevent the settings dialog to be saved in the session */
- gdk_set_sm_client_id("FAKE ID");
+ gdk_x11_set_sm_client_id("FAKE ID");
gtk_main();
} else {
diff --git a/src/main.c b/src/main.c
index 76b275b..f8b7063 100644
--- a/src/main.c
+++ b/src/main.c
@@ -253,10 +253,7 @@ main(int argc, char **argv)
/* bind gettext textdomain */
xfce_textdomain(GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
-
-#if defined(ENABLE_FILE_ICONS) || defined(USE_DESKTOP_MENU)
- g_thread_init(NULL);
-#endif
+
#ifdef ENABLE_FILE_ICONS
dbus_g_thread_init();
#endif
@@ -374,7 +371,7 @@ main(int argc, char **argv)
menu_attach(XFCE_DESKTOP(desktops[i]));
windowlist_attach(XFCE_DESKTOP(desktops[i]));
gtk_widget_show(desktops[i]);
- gdk_window_lower(desktops[i]->window);
+ gdk_window_lower(gtk_widget_get_window(desktops[i]));
}
for(i = 0; i < nscreens; ++i) {
diff --git a/src/windowlist.c b/src/windowlist.c
index 32343d6..e337a6e 100644
--- a/src/windowlist.c
+++ b/src/windowlist.c
@@ -61,14 +61,14 @@ set_num_workspaces(GtkWidget *w, gpointer num)
GdkWindow *groot = gdk_screen_get_root_window(gscreen);
if(!xa_NET_NUMBER_OF_DESKTOPS) {
- xa_NET_NUMBER_OF_DESKTOPS = XInternAtom(GDK_DISPLAY(),
+ xa_NET_NUMBER_OF_DESKTOPS = XInternAtom(gdk_x11_get_default_xdisplay(),
"_NET_NUMBER_OF_DESKTOPS", False);
}
n = GPOINTER_TO_INT(num);
sev.type = ClientMessage;
- sev.display = GDK_DISPLAY();
+ sev.display = gdk_x11_get_default_xdisplay();
sev.format = 32;
sev.window = GDK_WINDOW_XID(groot);
sev.message_type = xa_NET_NUMBER_OF_DESKTOPS;
@@ -76,7 +76,7 @@ set_num_workspaces(GtkWidget *w, gpointer num)
gdk_error_trap_push();
- XSendEvent(GDK_DISPLAY(), GDK_WINDOW_XID(groot), False,
+ XSendEvent(gdk_x11_get_default_xdisplay(), GDK_WINDOW_XID(groot), False,
SubstructureNotifyMask | SubstructureRedirectMask,
(XEvent *)&sev);
diff --git a/src/xfce-backdrop.c b/src/xfce-backdrop.c
index b07492f..4ec88bf 100644
--- a/src/xfce-backdrop.c
+++ b/src/xfce-backdrop.c
@@ -516,7 +516,7 @@ xfce_backdrop_new(GdkVisual *visual)
g_return_val_if_fail(GDK_IS_VISUAL(visual), NULL);
backdrop = g_object_new(XFCE_TYPE_BACKDROP, NULL);
- backdrop->priv->bpp = visual->depth;
+ backdrop->priv->bpp = gdk_visual_get_depth(visual);
return backdrop;
}
@@ -541,7 +541,7 @@ xfce_backdrop_new_with_size(GdkVisual *visual,
backdrop = g_object_new(XFCE_TYPE_BACKDROP, NULL);
- backdrop->priv->bpp = visual->depth;
+ backdrop->priv->bpp = gdk_visual_get_depth(visual);
backdrop->priv->width = width;
backdrop->priv->height = height;
diff --git a/src/xfce-desktop.c b/src/xfce-desktop.c
index 526ecf7..b3f3d29 100644
--- a/src/xfce-desktop.c
+++ b/src/xfce-desktop.c
@@ -311,6 +311,7 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data)
XfceDesktop *desktop = XFCE_DESKTOP(user_data);
GdkPixmap *pmap = desktop->priv->bg_pixmap;
GdkScreen *gscreen = desktop->priv->gscreen;
+ cairo_t *cr;
GdkPixbuf *pix;
GdkRectangle rect;
guint i;
@@ -320,7 +321,7 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data)
g_return_if_fail(XFCE_IS_DESKTOP(desktop));
- if(desktop->priv->updates_frozen || !GTK_WIDGET_REALIZED(GTK_WIDGET(desktop)))
+ if(desktop->priv->updates_frozen || !gtk_widget_get_realized(GTK_WIDGET(desktop)))
return;
TRACE("really entering");
@@ -362,11 +363,11 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data)
gdk_screen_get_monitor_geometry(gscreen, monitor, &rect);
}
- gdk_draw_pixbuf(GDK_DRAWABLE(pmap), GTK_WIDGET(desktop)->style->black_gc,
- pix, 0, 0, rect.x, rect.y,
- gdk_pixbuf_get_width(pix), gdk_pixbuf_get_height(pix),
- GDK_RGB_DITHER_MAX, 0, 0);
+ cr = gdk_cairo_create(GDK_DRAWABLE(pmap));
+ gdk_cairo_set_source_pixbuf(cr, pix, rect.x, rect.y);
+ cairo_paint(cr);
g_object_unref(G_OBJECT(pix));
+ cairo_destroy(cr);
/* tell gtk to redraw the repainted area */
gtk_widget_queue_draw_area(GTK_WIDGET(desktop), rect.x, rect.y,
@@ -419,11 +420,11 @@ screen_size_changed_cb(GdkScreen *gscreen, gpointer user_data)
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(desktop)->window),
+ 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(desktop)->window,
+ gdk_window_set_back_pixmap(gtk_widget_get_window(GTK_WIDGET(desktop)),
desktop->priv->bg_pixmap, FALSE);
/* special case for 1 backdrop to handle xinerama stretching */
@@ -526,26 +527,26 @@ screen_set_selection(XfceDesktop *desktop)
gchar selection_name[100];
Atom selection_atom, manager_atom;
- xwin = GDK_WINDOW_XID(GTK_WIDGET(desktop)->window);
+ xwin = GDK_WINDOW_XID(gtk_widget_get_window(GTK_WIDGET(desktop)));
xscreen = gdk_screen_get_number(desktop->priv->gscreen);
g_snprintf(selection_name, 100, XFDESKTOP_SELECTION_FMT, xscreen);
- selection_atom = XInternAtom(GDK_DISPLAY(), selection_name, False);
- manager_atom = XInternAtom(GDK_DISPLAY(), "MANAGER", False);
+ selection_atom = XInternAtom(gdk_x11_get_default_xdisplay(), selection_name, False);
+ manager_atom = XInternAtom(gdk_x11_get_default_xdisplay(), "MANAGER", False);
/* the previous check in src/main.c occurs too early, so workaround by
* adding this one. */
- if(XGetSelectionOwner(GDK_DISPLAY(), selection_atom) != None) {
+ if(XGetSelectionOwner(gdk_x11_get_default_xdisplay(), selection_atom) != None) {
g_warning("%s: already running, quitting.", PACKAGE);
exit(0);
}
- XSelectInput(GDK_DISPLAY(), xwin, PropertyChangeMask | ButtonPressMask);
- XSetSelectionOwner(GDK_DISPLAY(), selection_atom, xwin, GDK_CURRENT_TIME);
+ XSelectInput(gdk_x11_get_default_xdisplay(), xwin, PropertyChangeMask | ButtonPressMask);
+ XSetSelectionOwner(gdk_x11_get_default_xdisplay(), selection_atom, xwin, GDK_CURRENT_TIME);
/* Check to see if we managed to claim the selection. If not,
* we treat it as if we got it then immediately lost it */
- if(XGetSelectionOwner(GDK_DISPLAY(), selection_atom) == xwin) {
+ if(XGetSelectionOwner(gdk_x11_get_default_xdisplay(), selection_atom) == xwin) {
XClientMessageEvent xev;
Window xroot = GDK_WINDOW_XID(gdk_screen_get_root_window(desktop->priv->gscreen));
@@ -559,7 +560,7 @@ screen_set_selection(XfceDesktop *desktop)
xev.data.l[3] = 0; /* manager specific data */
xev.data.l[4] = 0; /* manager specific data */
- XSendEvent(GDK_DISPLAY(), xroot, False, StructureNotifyMask, (XEvent *)&xev);
+ XSendEvent(gdk_x11_get_default_xdisplay(), xroot, False, StructureNotifyMask, (XEvent *)&xev);
} else {
g_error("%s: could not set selection ownership", PACKAGE);
exit(1);
@@ -669,7 +670,6 @@ xfce_desktop_init(XfceDesktop *desktop)
{
desktop->priv = G_TYPE_INSTANCE_GET_PRIVATE(desktop, XFCE_TYPE_DESKTOP,
XfceDesktopPriv);
- GTK_WINDOW(desktop)->type = GTK_WINDOW_TOPLEVEL;
gtk_window_set_type_hint(GTK_WINDOW(desktop), GDK_WINDOW_TYPE_HINT_DESKTOP);
gtk_window_set_accept_focus(GTK_WINDOW(desktop), FALSE);
@@ -798,12 +798,12 @@ xfce_desktop_realize(GtkWidget *widget)
gtk_window_move(GTK_WINDOW(desktop), 0, 0);
atom = gdk_atom_intern("_NET_WM_WINDOW_TYPE_DESKTOP", FALSE);
- gdk_property_change(GTK_WIDGET(desktop)->window,
+ gdk_property_change(gtk_widget_get_window(GTK_WIDGET(desktop)),
gdk_atom_intern("_NET_WM_WINDOW_TYPE", FALSE),
gdk_atom_intern("ATOM", FALSE), 32,
GDK_PROP_MODE_REPLACE, (guchar *)&atom, 1);
- xid = GDK_WINDOW_XID(GTK_WIDGET(desktop)->window);
+ xid = GDK_WINDOW_XID(gtk_widget_get_window(GTK_WIDGET(desktop)));
groot = gdk_screen_get_root_window(desktop->priv->gscreen);
gdk_property_change(groot,
@@ -852,9 +852,9 @@ xfce_desktop_unrealize(GtkWidget *widget)
desktop);
}
- if(GTK_WIDGET_MAPPED(widget))
+ if(gtk_widget_get_mapped(widget))
gtk_widget_unmap(widget);
- GTK_WIDGET_UNSET_FLAGS(widget, GTK_MAPPED);
+ gtk_widget_set_mapped(widget, FALSE);
gtk_container_forall(GTK_CONTAINER(widget),
(GtkCallback)gtk_widget_unrealize,
@@ -895,13 +895,13 @@ xfce_desktop_unrealize(GtkWidget *widget)
gtk_window_set_icon(GTK_WINDOW(widget), NULL);
- gtk_style_detach(widget->style);
- g_object_unref(G_OBJECT(widget->window));
- widget->window = NULL;
+ gtk_style_detach(gtk_widget_get_style(widget));
+ g_object_unref(G_OBJECT(gtk_widget_get_window(widget)));
+ gtk_widget_set_window(widget, NULL);
gtk_selection_remove_all(widget);
- GTK_WIDGET_UNSET_FLAGS(widget, GTK_REALIZED);
+ gtk_widget_set_realized(widget, FALSE);
}
static gboolean
@@ -964,7 +964,7 @@ xfce_desktop_expose(GtkWidget *w,
if(evt->count != 0)
return FALSE;
- gdk_window_clear_area(w->window, evt->area.x, evt->area.y,
+ gdk_window_clear_area(gtk_widget_get_window(w), evt->area.x, evt->area.y,
evt->area.width, evt->area.height);
children = gtk_container_get_children(GTK_CONTAINER(w));
@@ -998,7 +998,7 @@ xfce_desktop_style_set(GtkWidget *w,
#endif
if(GDK_IS_WINDOW(desktop->priv->bg_pixmap))
- gdk_window_set_back_pixmap(w->window, desktop->priv->bg_pixmap, FALSE);
+ gdk_window_set_back_pixmap(gtk_widget_get_window(w), desktop->priv->bg_pixmap, FALSE);
gtk_widget_queue_draw(w);
#ifdef ENABLE_DESKTOP_ICONS
@@ -1279,7 +1279,7 @@ xfce_desktop_set_icon_style(XfceDesktop *desktop,
}
desktop->priv->icons_style = style;
- if(GTK_WIDGET_REALIZED(desktop))
+ if(gtk_widget_get_realized(GTK_WIDGET(desktop)))
xfce_desktop_setup_icon_view(desktop);
#endif
}
@@ -1380,7 +1380,7 @@ xfce_desktop_thaw_updates(XfceDesktop *desktop)
g_return_if_fail(XFCE_IS_DESKTOP(desktop));
desktop->priv->updates_frozen = FALSE;
- if(GTK_WIDGET_REALIZED(desktop))
+ if(gtk_widget_get_realized(GTK_WIDGET(desktop)))
xfce_desktop_monitors_changed(desktop->priv->gscreen, desktop);
}
@@ -1389,7 +1389,7 @@ xfce_desktop_peek_backdrop(XfceDesktop *desktop,
guint monitor)
{
g_return_val_if_fail(XFCE_IS_DESKTOP(desktop)
- && GTK_WIDGET_REALIZED(GTK_WIDGET(desktop))
+ && gtk_widget_get_realized(GTK_WIDGET(desktop))
&& monitor < desktop->priv->nbackdrops, NULL);
return desktop->priv->backdrops[monitor];
}
@@ -1474,7 +1474,7 @@ xfce_desktop_refresh(XfceDesktop *desktop)
g_return_if_fail(XFCE_IS_DESKTOP(desktop));
- if(!GTK_WIDGET_REALIZED(desktop))
+ if(!gtk_widget_get_realized(GTK_WIDGET(desktop)))
return;
/* reload image */
diff --git a/src/xfdesktop-clipboard-manager.c b/src/xfdesktop-clipboard-manager.c
index ed90aa0..d5d8e50 100644
--- a/src/xfdesktop-clipboard-manager.c
+++ b/src/xfdesktop-clipboard-manager.c
@@ -237,8 +237,12 @@ xfdesktop_clipboard_manager_finalize (GObject *object)
g_list_free (manager->files);
/* disconnect from the clipboard */
- g_signal_handlers_disconnect_by_func (G_OBJECT (manager->clipboard), xfdesktop_clipboard_manager_owner_changed, manager);
- g_object_set_qdata (G_OBJECT (manager->clipboard), xfdesktop_clipboard_manager_quark, NULL);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (manager->clipboard),
+ xfdesktop_clipboard_manager_owner_changed,
+ manager);
+ g_object_set_qdata (G_OBJECT (manager->clipboard),
+ xfdesktop_clipboard_manager_quark,
+ NULL);
g_object_unref (G_OBJECT (manager->clipboard));
(*G_OBJECT_CLASS (xfdesktop_clipboard_manager_parent_class)->finalize) (object);
@@ -322,11 +326,11 @@ xfdesktop_clipboard_manager_contents_received (GtkClipboard *clipboard,
gchar *data;
/* check whether the retrieval worked */
- if (G_LIKELY (selection_data->length > 0))
+ if (G_LIKELY (gtk_selection_data_get_length(selection_data) > 0))
{
/* be sure the selection data is zero-terminated */
- data = (gchar *) selection_data->data;
- data[selection_data->length] = '\0';
+ data = (gchar *) gtk_selection_data_get_data(selection_data);
+ data[gtk_selection_data_get_length(selection_data)] = '\0';
/* check whether to copy or move */
if (g_ascii_strncasecmp (data, "copy\n", 5) == 0)
@@ -473,12 +477,20 @@ xfdesktop_clipboard_manager_get_callback (GtkClipboard *clipboard,
{
case TARGET_GNOME_COPIED_FILES:
data = g_strconcat (manager->files_cutted ? "cut\n" : "copy\n", string_list, NULL);
- gtk_selection_data_set (selection_data, selection_data->target, 8, (guchar *) data, strlen (data));
+ gtk_selection_data_set (selection_data,
+ gtk_selection_data_get_target(selection_data),
+ 8,
+ (guchar *) data,
+ strlen (data));
g_free (data);
break;
case TARGET_UTF8_STRING:
- gtk_selection_data_set (selection_data, selection_data->target, 8, (guchar *) string_list, strlen (string_list));
+ gtk_selection_data_set (selection_data,
+ gtk_selection_data_get_target(selection_data),
+ 8,
+ (guchar *) string_list,
+ strlen (string_list));
break;
default:
diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c
index 72b6d09..d5e9ce3 100644
--- a/src/xfdesktop-file-icon-manager.c
+++ b/src/xfdesktop-file-icon-manager.c
@@ -1150,7 +1150,7 @@ xfdesktop_file_icon_menu_fill_template_menu(GtkWidget *menu,
|| have_templates;
/* check if any items were added to the submenu */
- if (GTK_MENU_SHELL(submenu)->children)
+ if (gtk_menu_item_get_submenu(GTK_MENU_ITEM(submenu)))
{
/* create a new menu item for the submenu */
item = gtk_image_menu_item_new_with_label (g_file_info_get_display_name(info));
@@ -2860,7 +2860,7 @@ xfdesktop_file_icon_manager_drag_drop(XfdesktopIconViewManager *manager,
} else
source_file = fmanager->priv->folder;
- if(gdk_property_get(context->source_window,
+ if(gdk_property_get(gdk_drag_context_get_source_window(context),
gdk_atom_intern("XdndDirectSave0", FALSE),
gdk_atom_intern("text/plain", FALSE),
0, 1024, FALSE, NULL, NULL, &prop_len,
@@ -2873,7 +2873,7 @@ xfdesktop_file_icon_manager_drag_drop(XfdesktopIconViewManager *manager,
uri = g_file_get_uri(file);
g_object_unref(file);
- gdk_property_change(context->source_window,
+ gdk_property_change(gdk_drag_context_get_source_window(context),
gdk_atom_intern("XdndDirectSave0", FALSE),
gdk_atom_intern("text/plain", FALSE), 8,
GDK_PROP_MODE_REPLACE, (const guchar *)uri,
@@ -2917,6 +2917,7 @@ static void xfdesktop_dnd_item_cancel(GtkWidget *item, GdkDragAction *action)
* @manager : the #XfdesktopIconViewManager instance
* @drop_icon : the #XfdesktopIcon to which is being dropped.
* @context : the #GdkDragContext of the icons being dropped.
+ * @action : the #GdkDragAction that the user selected. [out]
* @row : the row on the desktop to drop to.
* @col : the col on the desktop to drop to.
* @ time_ : the starting time of the drag event.
@@ -2930,6 +2931,7 @@ static void xfdesktop_dnd_item_cancel(GtkWidget *item, GdkDragAction *action)
static void xfdesktop_dnd_menu (XfdesktopIconViewManager *manager,
XfdesktopIcon *drop_icon,
GdkDragContext *context,
+ GdkDragAction *action,
guint16 row,
guint16 col,
guint time_)
@@ -2983,7 +2985,7 @@ static void xfdesktop_dnd_menu (XfdesktopIconViewManager *manager,
g_signal_handler_disconnect(G_OBJECT(menu), signal_id);
g_main_loop_unref(loop);
- context->action = response;
+ *action = response;
g_object_unref(G_OBJECT(menu));
}
@@ -3004,14 +3006,17 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager
GFile *tfile = NULL;
gboolean copy_only = TRUE, drop_ok = FALSE;
GList *file_list;
+ GdkDragAction action;
gboolean user_selected_action = FALSE;
TRACE("entering");
- if(context->action == GDK_ACTION_ASK) {
- xfdesktop_dnd_menu(manager, drop_icon, context, row, col, time_);
+ action = gdk_drag_context_get_selected_action(context);
- if(context->action == 0) {
+ if(action == GDK_ACTION_ASK) {
+ xfdesktop_dnd_menu(manager, drop_icon, context, &action, row, col, time_);
+
+ if(action == 0) {
gtk_drag_finish(context, FALSE, FALSE, time_);
return;
}
@@ -3023,16 +3028,13 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager
/* we don't suppose XdndDirectSave stage 3, result F, i.e., the app
* has to save the data itself given the filename we provided in
* stage 1 */
- if(8 == data->format && 1 == data->length && 'F' == data->data[0]) {
- gdk_property_change(context->source_window,
+ if(8 == gtk_selection_data_get_format(data)
+ && 1 == gtk_selection_data_get_length(data)
+ && 'F' == gtk_selection_data_get_data(data)[0]) {
+ gdk_property_change(gdk_drag_context_get_source_window(context),
gdk_atom_intern("XdndDirectSave0", FALSE),
gdk_atom_intern("text/plain", FALSE), 8,
GDK_PROP_MODE_REPLACE, (const guchar *)"", 0);
- } else if(8 == data->format && data->length == 1
- && 'S' == data->data[0])
- {
- /* FIXME: do we really need to do anything here? xfdesktop should
- * detect when something changes on its own */
}
drop_ok = TRUE;
@@ -3049,7 +3051,7 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager
source_file = fmanager->priv->folder;
if(source_file && exo_desktop_item_edit) {
- gchar **parts = g_strsplit((const gchar *)data->data, "\n", -1);
+ gchar **parts = g_strsplit((const gchar *)gtk_selection_data_get_data(data), "\n", -1);
if(2 == g_strv_length(parts)) {
gchar *cwd = g_file_get_uri(source_file);
@@ -3090,14 +3092,14 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager
tinfo = xfdesktop_file_icon_peek_file_info(file_icon);
}
- copy_only = (context->action == GDK_ACTION_COPY);
+ copy_only = (action == GDK_ACTION_COPY);
if(tfile && g_file_has_uri_scheme(tfile, "trash") && copy_only) {
gtk_drag_finish(context, FALSE, FALSE, time_);
return;
}
- file_list = xfdesktop_file_utils_file_list_from_string((const gchar *)data->data);
+ file_list = xfdesktop_file_utils_file_list_from_string((const gchar *)gtk_selection_data_get_data(data));
if(file_list) {
GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
@@ -3162,7 +3164,7 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager
G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))
{
copy_only = FALSE;
- context->action = GDK_ACTION_MOVE;
+ action = GDK_ACTION_MOVE;
}
}
@@ -3195,7 +3197,7 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager
if(dest_file_list) {
dest_file_list = g_list_reverse(dest_file_list);
- drop_ok = xfdesktop_file_utils_transfer_files(context->action,
+ drop_ok = xfdesktop_file_utils_transfer_files(action,
file_list,
dest_file_list,
fmanager->priv->gscreen);
@@ -3235,7 +3237,7 @@ xfdesktop_file_icon_manager_drag_data_get(XfdesktopIconViewManager *manager,
file_list = xfdesktop_file_utils_file_icon_list_to_file_list(drag_icons);
str = xfdesktop_file_utils_file_list_to_string(file_list);
- gtk_selection_data_set(data, data->target, 8, (guchar *)str, strlen(str));
+ gtk_selection_data_set(data, gtk_selection_data_get_target(data), 8, (guchar *)str, strlen(str));
g_free(str);
xfdesktop_file_utils_file_list_free(file_list);
diff --git a/src/xfdesktop-file-utils.c b/src/xfdesktop-file-utils.c
index 2670bbd..ed721d9 100644
--- a/src/xfdesktop-file-utils.c
+++ b/src/xfdesktop-file-utils.c
@@ -585,12 +585,12 @@ xfdesktop_file_utils_set_window_cursor(GtkWindow *window,
{
GdkCursor *cursor;
- if(!window || !GTK_WIDGET(window)->window)
+ if(!window || !gtk_widget_get_window(GTK_WIDGET(window)))
return;
cursor = gdk_cursor_new(cursor_type);
if(G_LIKELY(cursor)) {
- gdk_window_set_cursor(GTK_WIDGET(window)->window, cursor);
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window)), cursor);
gdk_cursor_unref(cursor);
}
}
diff --git a/src/xfdesktop-icon-view.c b/src/xfdesktop-icon-view.c
index 1ea1296..5c62478 100644
--- a/src/xfdesktop-icon-view.c
+++ b/src/xfdesktop-icon-view.c
@@ -304,6 +304,8 @@ static void xfdesktop_screen_size_changed_cb(GdkScreen *gscreen,
static GdkFilterReturn xfdesktop_rootwin_watch_workarea(GdkXEvent *gxevent,
GdkEvent *event,
gpointer user_data);
+static void xfdesktop_move_all_icons_to_pending_icons_list(XfdesktopIconView *icon_view);
+static void xfdesktop_move_all_pending_icons_to_desktop(XfdesktopIconView* icon_view);
static void xfdesktop_grid_do_resize(XfdesktopIconView *icon_view);
static inline gboolean xfdesktop_rectangle_contains_point(GdkRectangle *rect,
gint x,
@@ -372,7 +374,7 @@ xfdesktop_icon_view_class_init(XfdesktopIconViewClass *klass)
GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
GtkBindingSet *binding_set;
- binding_set = gtk_binding_set_by_class(klass); //g_type_class_peek(g_type_from_name("XfceDesktop")));
+ binding_set = gtk_binding_set_by_class(klass);
g_type_class_add_private(klass, sizeof(XfdesktopIconViewPrivate));
@@ -585,61 +587,61 @@ xfdesktop_icon_view_class_init(XfdesktopIconViewClass *klass)
#undef XFDESKTOP_PARAM_FLAGS
/* same binding entries as GtkIconView */
- gtk_binding_entry_add_signal(binding_set, GDK_a, GDK_CONTROL_MASK,
+ gtk_binding_entry_add_signal(binding_set, GDK_KEY_a, GDK_CONTROL_MASK,
"select-all", 0);
- gtk_binding_entry_add_signal(binding_set, GDK_a,
+ gtk_binding_entry_add_signal(binding_set, GDK_KEY_a,
GDK_CONTROL_MASK | GDK_SHIFT_MASK,
"unselect-all", 0);
- gtk_binding_entry_add_signal(binding_set, GDK_space, GDK_CONTROL_MASK,
+ gtk_binding_entry_add_signal(binding_set, GDK_KEY_space, GDK_CONTROL_MASK,
"toggle-cursor-item", 0);
- gtk_binding_entry_add_signal(binding_set, GDK_KP_Space, GDK_CONTROL_MASK,
+ gtk_binding_entry_add_signal(binding_set, GDK_KEY_KP_Space, GDK_CONTROL_MASK,
"toggle-cursor-item", 0);
- gtk_binding_entry_add_signal(binding_set, GDK_space, 0,
+ gtk_binding_entry_add_signal(binding_set, GDK_KEY_space, 0,
"activate-cursor-item", 0);
- gtk_binding_entry_add_signal(binding_set, GDK_KP_Space, 0,
+ gtk_binding_entry_add_signal(binding_set, GDK_KEY_KP_Space, 0,
"activate-cursor-item", 0);
- gtk_binding_entry_add_signal(binding_set, GDK_Return, 0,
+ gtk_binding_entry_add_signal(binding_set, GDK_KEY_Return, 0,
"activate-cursor-item", 0);
- gtk_binding_entry_add_signal(binding_set, GDK_ISO_Enter, 0,
+ gtk_binding_entry_add_signal(binding_set, GDK_KEY_ISO_Enter, 0,
"activate-cursor-item", 0);
- gtk_binding_entry_add_signal(binding_set, GDK_KP_Enter, 0,
+ gtk_binding_entry_add_signal(binding_set, GDK_KEY_KP_Enter, 0,
"activate-cursor-item", 0);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_Up, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_Up, 0,
GTK_MOVEMENT_DISPLAY_LINES, -1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_KP_Up, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_KP_Up, 0,
GTK_MOVEMENT_DISPLAY_LINES, -1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_Down, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_Down, 0,
GTK_MOVEMENT_DISPLAY_LINES, 1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_KP_Down, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_KP_Down, 0,
GTK_MOVEMENT_DISPLAY_LINES, 1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_p, GDK_CONTROL_MASK,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_p, GDK_CONTROL_MASK,
GTK_MOVEMENT_DISPLAY_LINES, -1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_n, GDK_CONTROL_MASK,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_n, GDK_CONTROL_MASK,
GTK_MOVEMENT_DISPLAY_LINES, 1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_Home, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_Home, 0,
GTK_MOVEMENT_BUFFER_ENDS, -1);
xfdesktop_icon_view_add_move_binding(binding_set, GDK_KP_Home, 0,
GTK_MOVEMENT_BUFFER_ENDS, -1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_End, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_End, 0,
GTK_MOVEMENT_BUFFER_ENDS, 1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_KP_End, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_KP_End, 0,
GTK_MOVEMENT_BUFFER_ENDS, 1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_Right, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_Right, 0,
GTK_MOVEMENT_VISUAL_POSITIONS, 1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_Left, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_Left, 0,
GTK_MOVEMENT_VISUAL_POSITIONS, -1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_KP_Right, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_KP_Right, 0,
GTK_MOVEMENT_VISUAL_POSITIONS, 1);
- xfdesktop_icon_view_add_move_binding(binding_set, GDK_KP_Left, 0,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_KP_Left, 0,
GTK_MOVEMENT_VISUAL_POSITIONS, -1);
xfdesktop_cell_highlight_quark = g_quark_from_static_string("xfdesktop-icon-view-cell-highlight");
@@ -673,7 +675,7 @@ xfdesktop_icon_view_init(XfdesktopIconView *icon_view)
g_signal_connect(G_OBJECT(icon_view), "query-tooltip",
G_CALLBACK(xfdesktop_icon_view_show_tooltip), NULL);
- GTK_WIDGET_SET_FLAGS(GTK_WIDGET(icon_view), GTK_NO_WINDOW);
+ gtk_widget_set_has_window(GTK_WIDGET(icon_view), FALSE);
}
static void
@@ -751,7 +753,7 @@ xfdesktop_icon_view_add_move_binding(GtkBindingSet *binding_set,
G_TYPE_INT, count);
gtk_binding_entry_add_signal(binding_set, keyval, GDK_SHIFT_MASK,
- "move-cursor", 2,
+ I_("move-cursor"), 2,
G_TYPE_ENUM, step,
G_TYPE_INT, count);
@@ -760,12 +762,12 @@ xfdesktop_icon_view_add_move_binding(GtkBindingSet *binding_set,
gtk_binding_entry_add_signal(binding_set, keyval,
GDK_CONTROL_MASK | GDK_SHIFT_MASK,
- "move-cursor", 2,
+ I_("move-cursor"), 2,
G_TYPE_ENUM, step,
G_TYPE_INT, count);
gtk_binding_entry_add_signal(binding_set, keyval, GDK_CONTROL_MASK,
- "move-cursor", 2,
+ I_("move-cursor"), 2,
G_TYPE_ENUM, step,
G_TYPE_INT, count);
}
@@ -960,7 +962,7 @@ xfdesktop_icon_view_focus_in(GtkWidget *widget,
XfdesktopIconView *icon_view = XFDESKTOP_ICON_VIEW(user_data);
GList *l;
- GTK_WIDGET_SET_FLAGS(GTK_WIDGET(icon_view), GTK_HAS_FOCUS);
+ gtk_widget_grab_focus(GTK_WIDGET(icon_view));
DBG("GOT FOCUS");
for(l = icon_view->priv->selected_icons; l; l = l->next) {
@@ -978,7 +980,6 @@ xfdesktop_icon_view_focus_out(GtkWidget *widget,
XfdesktopIconView *icon_view = XFDESKTOP_ICON_VIEW(user_data);
GList *l;
- GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(icon_view), GTK_HAS_FOCUS);
DBG("LOST FOCUS");
for(l = icon_view->priv->selected_icons; l; l = l->next) {
@@ -986,8 +987,8 @@ xfdesktop_icon_view_focus_out(GtkWidget *widget,
}
if(G_UNLIKELY(icon_view->priv->single_click)) {
- if(G_LIKELY(icon_view->priv->parent_window->window != NULL)) {
- gdk_window_set_cursor(icon_view->priv->parent_window->window, NULL);
+ if(G_LIKELY(gtk_widget_get_window(GTK_WIDGET(icon_view->priv->parent_window)) != NULL)) {
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(icon_view->priv->parent_window)), NULL);
}
}
@@ -1125,7 +1126,7 @@ xfdesktop_icon_view_motion_notify(GtkWidget *widget,
gdk_region_destroy(region_intersect);
}
- gdk_window_invalidate_region(widget->window, region, TRUE);;
+ gdk_window_invalidate_region(gtk_widget_get_window(widget), region, TRUE);
gdk_region_destroy(region);
/* update list of selected icons */
@@ -1229,8 +1230,8 @@ xfdesktop_icon_view_leave_notify(GtkWidget *widget,
}
if(G_UNLIKELY(icon_view->priv->single_click)) {
- if(GTK_WIDGET_REALIZED(widget)) {
- gdk_window_set_cursor(widget->window, NULL);
+ if(gtk_widget_get_realized(widget)) {
+ gdk_window_set_cursor(gtk_widget_get_window(widget), NULL);
}
}
@@ -1285,25 +1286,25 @@ xfdesktop_icon_view_clear_drag_highlight(XfdesktopIconView *icon_view,
return;
gtk_widget_queue_draw_area(GTK_WIDGET(icon_view),
- cell_highlight->x,
+ cell_highlight->x - 1,
cell_highlight->y,
- 1,
+ 2,
cell_highlight->height);
gtk_widget_queue_draw_area(GTK_WIDGET(icon_view),
- cell_highlight->x + cell_highlight->width,
+ cell_highlight->x + cell_highlight->width - 1,
cell_highlight->y,
- 1,
+ 2,
cell_highlight->height);
gtk_widget_queue_draw_area(GTK_WIDGET(icon_view),
cell_highlight->x,
- cell_highlight->y,
+ cell_highlight->y - 1,
cell_highlight->width,
- 1);
+ 2);
gtk_widget_queue_draw_area(GTK_WIDGET(icon_view),
cell_highlight->x,
- cell_highlight->y + cell_highlight->height,
- cell_highlight->width + 1, /* why? */
- 1);
+ cell_highlight->y + cell_highlight->height - 1,
+ cell_highlight->width,
+ 2);
cell_highlight->width = cell_highlight->height = 0;
}
@@ -1315,6 +1316,7 @@ xfdesktop_icon_view_draw_drag_highlight(XfdesktopIconView *icon_view,
guint16 col)
{
GtkWidget *widget = GTK_WIDGET(icon_view);
+ cairo_t *cr;
GdkRectangle *cell_highlight;
gint newx, newy;
@@ -1337,10 +1339,13 @@ xfdesktop_icon_view_draw_drag_highlight(XfdesktopIconView *icon_view,
cell_highlight->x = newx;
cell_highlight->y = newy;
cell_highlight->width = cell_highlight->height = CELL_SIZE;
-
- gdk_draw_rectangle(GDK_DRAWABLE(widget->window),
- widget->style->bg_gc[GTK_STATE_SELECTED], FALSE,
- newx, newy, CELL_SIZE, CELL_SIZE);
+
+ cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
+ gdk_cairo_set_source_color(cr, >k_widget_get_style(widget)->bg[GTK_STATE_SELECTED]);
+ cairo_set_line_width(cr, 0.5);
+ cairo_rectangle(cr, newx, newy, CELL_SIZE, CELL_SIZE);
+ cairo_stroke(cr);
+ cairo_destroy(cr);
}
static gboolean
@@ -1391,7 +1396,7 @@ xfdesktop_icon_view_drag_motion(GtkWidget *widget,
if(is_local_drag) /* # 1 */
our_action = GDK_ACTION_MOVE;
else /* #3 */
- our_action = context->suggested_action;
+ our_action = gdk_drag_context_get_suggested_action(context);
} else {
/* start with everything */
GdkDragAction allowed_actions = (GDK_ACTION_MOVE | GDK_ACTION_COPY
@@ -1418,8 +1423,8 @@ xfdesktop_icon_view_drag_motion(GtkWidget *widget,
/* #2 or #4 */
allowed_actions &= xfdesktop_icon_get_allowed_drop_actions(icon_on_dest);
- if(allowed_actions & context->suggested_action)
- our_action = context->suggested_action;
+ if(allowed_actions & gdk_drag_context_get_suggested_action(context))
+ our_action = gdk_drag_context_get_suggested_action(context);
else {
/* priority: move, copy, link */
if(allowed_actions & GDK_ACTION_MOVE)
@@ -1492,7 +1497,7 @@ xfdesktop_icon_view_drag_drop(GtkWidget *widget,
for(l = icon_view->priv->selected_icons; l; l = l->next) {
if(xfdesktop_icon_do_drop_dest(icon_on_dest,
XFDESKTOP_ICON(l->data),
- context->action))
+ gdk_drag_context_get_selected_action(context)))
{
ret = TRUE;
}
@@ -1636,13 +1641,27 @@ xfdesktop_icon_view_compare_icons(gconstpointer *a,
}
static void
+xfdesktop_move_icon_from_pending_list_to_icons_list(XfdesktopIconView *icon_view,
+ XfdesktopIcon *icon)
+{
+ GList *pending_icons = icon_view->priv->pending_icons;
+ GList *icon_list = icon_view->priv->icons;
+
+ if(g_list_find(pending_icons, icon)) {
+ /* Add the icon to the icon list and remove from the pending list */
+ icon_list = g_list_append(icon_list, icon);
+ pending_icons = g_list_remove(pending_icons, icon);
+ }
+}
+
+static void
xfdesktop_icon_view_append_icons(XfdesktopIconView *icon_view,
GList *icon_list,
guint16 *row,
guint16 *col)
{
GList *l = NULL;
- for(l = icon_list; l; l = l->next) {
+ for(l = icon_list; l != NULL; l = g_list_next(l)) {
/* Find the next available spot for an icon */
do {
@@ -1662,6 +1681,38 @@ xfdesktop_icon_view_append_icons(XfdesktopIconView *icon_view,
}
}
+static void
+xfdesktop_icon_view_append_pending_icons(XfdesktopIconView *icon_view)
+{
+ GList *l = NULL;
+ guint16 row = 0, col = 0;
+
+ for(l = icon_view->priv->pending_icons; l != NULL; l = g_list_next(l)) {
+
+ /* Find the next available spot for an icon */
+ do {
+ if(row + 1 >= icon_view->priv->nrows) {
+ ++col;
+ row = 0;
+ } else {
+ ++row;
+ }
+
+ /* Check that we haven't ran out of space */
+ if(col > icon_view->priv->ncols)
+ return;
+ } while(!xfdesktop_grid_is_free_position(icon_view, row, col));
+
+ /* set new position */
+ xfdesktop_icon_set_position(l->data, row, col);
+ xfdesktop_grid_unset_position_free(icon_view, l->data);
+
+ xfdesktop_move_icon_from_pending_list_to_icons_list(icon_view, l->data);
+
+ xfdesktop_icon_view_invalidate_icon(icon_view, l->data, TRUE);
+ }
+}
+
void
xfdesktop_icon_view_sort_icons(XfdesktopIconView *icon_view)
{
@@ -1737,7 +1788,7 @@ xfdesktop_icon_view_style_set(GtkWidget *widget,
/* default the shadow color to the inverse of the text color */
if (!icon_view->priv->shadow_color) {
- icon_view->priv->shadow_color = gdk_color_copy(&widget->style->fg[GTK_STATE_NORMAL]);
+ icon_view->priv->shadow_color = gdk_color_copy(>k_widget_get_style(widget)->fg[GTK_STATE_NORMAL]);
icon_view->priv->shadow_color->red ^= 0xffff;
icon_view->priv->shadow_color->green ^= 0xffff;
icon_view->priv->shadow_color->blue ^= 0xffff;
@@ -1763,7 +1814,7 @@ xfdesktop_icon_view_style_set(GtkWidget *widget,
/* default the shadow color to the inverse of the text color */
if (!icon_view->priv->selected_shadow_color) {
- icon_view->priv->selected_shadow_color = gdk_color_copy(&widget->style->fg[GTK_STATE_SELECTED]);
+ icon_view->priv->selected_shadow_color = gdk_color_copy(>k_widget_get_style(widget)->fg[GTK_STATE_SELECTED]);
icon_view->priv->selected_shadow_color->red ^= 0xffff;
icon_view->priv->selected_shadow_color->green ^= 0xffff;
icon_view->priv->selected_shadow_color->blue ^= 0xffff;
@@ -1829,20 +1880,21 @@ xfdesktop_icon_view_realize(GtkWidget *widget)
PangoContext *pctx;
GdkScreen *gscreen;
GdkWindow *groot;
- GList *l, *leftovers = NULL;
icon_view->priv->parent_window = gtk_widget_get_toplevel(widget);
g_return_if_fail(icon_view->priv->parent_window);
- widget->window = icon_view->priv->parent_window->window;
+ gtk_widget_set_window(widget, gtk_widget_get_window(icon_view->priv->parent_window));
- widget->style = gtk_style_attach(widget->style, widget->window);
+ gtk_widget_set_style(widget,
+ gtk_style_attach(gtk_widget_get_style(widget),
+ gtk_widget_get_window(widget)));
/* there's no reason to start up the manager before we're realized,
* but we do NOT shut it down if we unrealize, since there may not be
* a reason to do so. shutdown occurs in finalize. */
xfdesktop_icon_view_manager_init(icon_view->priv->manager, icon_view);
- GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
+ gtk_widget_set_realized(widget, TRUE);
gtk_window_set_accept_focus(GTK_WINDOW(icon_view->priv->parent_window),
TRUE);
@@ -1903,15 +1955,7 @@ xfdesktop_icon_view_realize(GtkWidget *widget)
G_CALLBACK(xfdesktop_icon_view_icon_theme_changed),
icon_view);
- for(l = icon_view->priv->pending_icons; l; l = l->next) {
- XfdesktopIcon *icon = XFDESKTOP_ICON(l->data);
- if(xfdesktop_icon_view_icon_find_position(icon_view, icon))
- xfdesktop_icon_view_add_item_internal(icon_view, icon);
- else
- leftovers = g_list_prepend(leftovers, icon);
- }
- g_list_free(icon_view->priv->pending_icons);
- icon_view->priv->pending_icons = g_list_reverse(leftovers);
+ xfdesktop_move_all_pending_icons_to_desktop(icon_view);
}
static void
@@ -1920,7 +1964,6 @@ xfdesktop_icon_view_unrealize(GtkWidget *widget)
XfdesktopIconView *icon_view = XFDESKTOP_ICON_VIEW(widget);
GdkScreen *gscreen;
GdkWindow *groot;
- GList *l;
gtk_window_set_accept_focus(GTK_WINDOW(icon_view->priv->parent_window), FALSE);
@@ -1959,17 +2002,9 @@ xfdesktop_icon_view_unrealize(GtkWidget *widget)
/* FIXME: really clear these? */
g_list_free(icon_view->priv->selected_icons);
icon_view->priv->selected_icons = NULL;
-
- /* move all icons into the pending_icons list */
- for(l = icon_view->priv->icons; l; l = l->next) {
- g_signal_handlers_disconnect_by_func(G_OBJECT(l->data),
- G_CALLBACK(xfdesktop_icon_view_icon_changed),
- icon_view);
- }
- icon_view->priv->pending_icons = g_list_concat(icon_view->priv->icons,
- icon_view->priv->pending_icons);
- icon_view->priv->icons = NULL;
-
+
+ xfdesktop_move_all_icons_to_pending_icons_list(icon_view);
+
g_free(icon_view->priv->grid_layout);
icon_view->priv->grid_layout = NULL;
@@ -1991,8 +2026,8 @@ xfdesktop_icon_view_unrealize(GtkWidget *widget)
icon_view->priv->selected_shadow_color = NULL;
}
- widget->window = NULL;
- GTK_WIDGET_UNSET_FLAGS(widget, GTK_REALIZED);
+ gtk_widget_set_window(widget, NULL);
+ gtk_widget_set_realized(widget, FALSE);
}
static gboolean
@@ -2017,7 +2052,7 @@ xfdesktop_icon_view_expose(GtkWidget *widget,
GdkRectangle intersect;
cairo_t *cr;
- cr = gdk_cairo_create(GDK_DRAWABLE(widget->window));
+ cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
cairo_set_line_width(cr, 1);
cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
cairo_set_source_rgba(cr,
@@ -2366,7 +2401,7 @@ xfdesktop_icon_view_real_move_cursor(XfdesktopIconView *icon_view,
if(count == 0)
return FALSE;
- if(!GTK_WIDGET_HAS_FOCUS(GTK_WIDGET(icon_view)))
+ if(gtk_widget_has_focus(GTK_WIDGET(icon_view)))
return FALSE;
gtk_widget_grab_focus(GTK_WIDGET(icon_view));
@@ -2601,7 +2636,7 @@ xfdesktop_icon_view_invalidate_icon(XfdesktopIconView *icon_view,
/* we always have to invalidate the old extents */
if(xfdesktop_icon_get_extents(icon, NULL, NULL, &extents)) {
- if(GTK_WIDGET_REALIZED(icon_view)) {
+ if(gtk_widget_get_realized(GTK_WIDGET(icon_view))) {
gtk_widget_queue_draw_area(GTK_WIDGET(icon_view), extents.x,
extents.y, extents.width,
extents.height);
@@ -2619,7 +2654,7 @@ xfdesktop_icon_view_invalidate_icon(XfdesktopIconView *icon_view,
&total_extents))
{
g_warning("Trying to invalidate icon, but can't recalculate extents");
- } else if(GTK_WIDGET_REALIZED(icon_view)) {
+ } else if(gtk_widget_get_realized(GTK_WIDGET(icon_view))) {
gtk_widget_queue_draw_area(GTK_WIDGET(icon_view),
total_extents.x, total_extents.y,
total_extents.width, total_extents.height);
@@ -2652,7 +2687,7 @@ xfdesktop_icon_view_invalidate_icon_pixbuf(XfdesktopIconView *icon_view,
rect.x += CELL_PADDING + ((CELL_SIZE - 2 * CELL_PADDING) - rect.width) / 2;
rect.y += CELL_PADDING + SPACING;
- if(GTK_WIDGET_REALIZED(icon_view)) {
+ if(gtk_widget_get_realized(GTK_WIDGET(icon_view))) {
gtk_widget_queue_draw_area(GTK_WIDGET(icon_view), rect.x, rect.y,
rect.width, rect.height);
}
@@ -2679,8 +2714,8 @@ xfdesktop_paint_rounded_box(XfdesktopIconView *icon_view,
box_area.height += label_radius * 2;
if(gdk_rectangle_intersect(&box_area, expose_area, &intersection)) {
- cairo_t *cr = gdk_cairo_create(GTK_WIDGET(icon_view)->window);
- GtkStyle *style = GTK_WIDGET(icon_view)->style;
+ cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(GTK_WIDGET(icon_view)));
+ GtkStyle *style = gtk_widget_get_style(GTK_WIDGET(icon_view));
double alpha;
if(state == GTK_STATE_NORMAL)
@@ -2772,7 +2807,6 @@ xfdesktop_icon_view_setup_pango_layout(XfdesktopIconView *icon_view,
pango_layout_get_pixel_extents(playout, NULL, &prect);
if(prect.width > TEXT_WIDTH) {
-// if(icon != icon_view->priv->cursor && icon_view->priv->ellipsize_icon_labels)
if(!g_list_find(icon_view->priv->selected_icons, icon) && icon_view->priv->ellipsize_icon_labels)
pango_layout_set_ellipsize(playout, PANGO_ELLIPSIZE_END);
else {
@@ -2878,6 +2912,34 @@ xfdesktop_icon_view_update_icon_extents(XfdesktopIconView *icon_view,
}
static void
+xfdesktop_icon_view_draw_image(cairo_t *cr, GdkPixbuf *pix, GdkRectangle *rect)
+{
+ cairo_save(cr);
+
+ gdk_cairo_rectangle(cr, rect);
+ cairo_clip(cr);
+
+ gdk_cairo_set_source_pixbuf(cr, pix, rect->x, rect->y);
+ cairo_paint(cr);
+
+ cairo_restore(cr);
+}
+
+static void
+xfdesktop_icon_view_draw_text(cairo_t *cr, PangoLayout *playout,
+ gint x, gint y, GdkColor *color)
+{
+ cairo_save(cr);
+
+ cairo_move_to(cr, x, y);
+
+ gdk_cairo_set_source_color(cr, color);
+ pango_cairo_show_layout(cr, playout);
+
+ cairo_restore(cr);
+}
+
+static void
xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view,
XfdesktopIcon *icon,
GdkRectangle *area)
@@ -2889,12 +2951,14 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view,
GdkRectangle intersection;
gchar x_offset = 0, y_offset = 0;
GdkColor *sh_text_col = NULL;
-
- /*TRACE("entering (%s)", xfdesktop_icon_peek_label(icon));*/
- TRACE("entering, (area=%dx%d+%d+%d)", area->width, area->height,
- area->x, area->y);
+ cairo_t *cr;
+
+ TRACE("entering, (%s)(area=%dx%d+%d+%d)", xfdesktop_icon_peek_label(icon),
+ area->width, area->height, area->x, area->y);
playout = icon_view->priv->playout;
+
+ cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
xfdesktop_icon_get_extents(icon, &pixbuf_extents,
&text_extents, &total_extents);
@@ -2910,7 +2974,7 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view,
}
if(g_list_find(icon_view->priv->selected_icons, icon)) {
- if(GTK_WIDGET_FLAGS(widget) & GTK_HAS_FOCUS)
+ if(gtk_widget_has_focus(widget))
state = GTK_STATE_SELECTED;
else
state = GTK_STATE_ACTIVE;
@@ -2922,7 +2986,7 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view,
GdkPixbuf *pix_free = NULL;
if(state != GTK_STATE_NORMAL) {
- pix_free = exo_gdk_pixbuf_colorize(pix, &widget->style->base[state]);
+ pix_free = exo_gdk_pixbuf_colorize(pix, >k_widget_get_style(widget)->base[state]);
pix = pix_free;
}
@@ -2935,15 +2999,10 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view,
}
TRACE("painting pixbuf at %dx%d+%d+%d",
- intersection.width, intersection.height,
- intersection.x, intersection.y);
-
- gdk_draw_pixbuf(GDK_DRAWABLE(widget->window), widget->style->black_gc,
- pix, intersection.x - pixbuf_extents.x,
- intersection.y - pixbuf_extents.y,
- intersection.x, intersection.y,
- intersection.width, intersection.height,
- GDK_RGB_DITHER_NORMAL, 0, 0);
+ pixbuf_extents.width, pixbuf_extents.height,
+ pixbuf_extents.x, pixbuf_extents.y);
+
+ xfdesktop_icon_view_draw_image(cr, pix, &pixbuf_extents);
if(pix_free)
g_object_unref(G_OBJECT(pix_free));
@@ -2963,40 +3022,19 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view,
/* draw text shadow for the label text if an offset was defined */
if(x_offset || y_offset) {
- GdkGC *tmp_gc;
-
- /* FIXME: it's probably not good for performance to create and
- * destroy a GC every time an icon gets painted. might want
- * to cache this somewhere. */
-
- /* save the original gc */
- tmp_gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
- gdk_gc_copy(tmp_gc, widget->style->text_gc[state]);
-
- /* set the new foreground color */
- gdk_gc_set_rgb_fg_color(widget->style->text_gc[state], sh_text_col);
-
- /* paint the shadow */
- gtk_paint_layout(widget->style, widget->window, state, TRUE,
- area, widget, "label",
- text_extents.x + x_offset,
- text_extents.y + y_offset,
- playout);
-
- /* restore the original gc */
- gdk_gc_copy(widget->style->text_gc[state], tmp_gc);
-
- /* clean */
- g_object_unref(G_OBJECT(tmp_gc));
+ xfdesktop_icon_view_draw_text(cr, playout,
+ text_extents.x + x_offset,
+ text_extents.y + y_offset,
+ sh_text_col);
}
-
- gtk_paint_layout(widget->style, widget->window, state, FALSE,
- area, widget, "label",
- text_extents.x, text_extents.y, playout);
+
+ xfdesktop_icon_view_draw_text(cr, playout,
+ text_extents.x,
+ text_extents.y,
+ gtk_widget_get_style(widget)->fg);
#if 0 /*def DEBUG*/
{
- cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(GTK_WIDGET(icon_view)->window));
GdkRectangle cell = { 0, };
guint16 row, col;
@@ -3027,7 +3065,6 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view,
cairo_rectangle(cr, cell.x, cell.y, cell.width, cell.height);
cairo_stroke(cr);
- cairo_destroy(cr);
//DBG("cell extents: %dx%d+%d+%d", cell.width, cell.height, cell.x, cell.y);
//DBG("new pixbuf extents: %dx%d+%d+%d", pixbuf_extents.width, pixbuf_extents.height, pixbuf_extents.x, pixbuf_extents.y);
@@ -3035,13 +3072,14 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view,
//DBG("new total extents: %dx%d+%d+%d", total_extents.width, total_extents.height, total_extents.x, total_extents.y);
}
#endif
+
+ cairo_destroy(cr);
}
static void
-xfdesktop_grid_do_resize(XfdesktopIconView *icon_view)
+xfdesktop_move_all_icons_to_pending_icons_list(XfdesktopIconView *icon_view)
{
- XfdesktopFileIconManager *fmanager = NULL;
- GList *l, *leftovers = NULL;
+ GList *l = NULL;
/* move all icons into the pending_icons list and remove from the desktop */
for(l = icon_view->priv->icons; l; l = l->next) {
@@ -3067,6 +3105,13 @@ xfdesktop_grid_do_resize(XfdesktopIconView *icon_view)
xfdesktop_setup_grids(icon_view);
DUMP_GRID_LAYOUT(icon_view);
+}
+
+static void
+xfdesktop_move_all_pending_icons_to_desktop(XfdesktopIconView* icon_view)
+{
+ XfdesktopFileIconManager *fmanager;
+ GList *l, *leftovers = NULL;
#ifdef ENABLE_FILE_ICONS
if(XFDESKTOP_IS_FILE_ICON_MANAGER(icon_view->priv->manager))
@@ -3098,7 +3143,31 @@ xfdesktop_grid_do_resize(XfdesktopIconView *icon_view)
}
g_list_free(icon_view->priv->pending_icons);
icon_view->priv->pending_icons = g_list_reverse(leftovers);
+
+ xfdesktop_icon_view_append_pending_icons(icon_view);
+}
+
+static void
+xfdesktop_grid_do_resize(XfdesktopIconView *icon_view)
+{
+ xfdesktop_move_all_icons_to_pending_icons_list(icon_view);
+
+#if 0 /*def DEBUG*/
+ DUMP_GRID_LAYOUT(icon_view);
+#endif
+
+ memset(icon_view->priv->grid_layout, 0,
+ icon_view->priv->nrows * icon_view->priv->ncols
+ * sizeof(XfdesktopIcon *));
+ xfdesktop_setup_grids(icon_view);
+
+#if 0 /*def DEBUG*/
+ DUMP_GRID_LAYOUT(icon_view);
+#endif
+
+ xfdesktop_move_all_pending_icons_to_desktop(icon_view);
+
gtk_widget_queue_draw(GTK_WIDGET(icon_view));
}
@@ -3459,7 +3528,7 @@ xfdesktop_icon_view_add_item(XfdesktopIconView *icon_view,
g_object_set_data(G_OBJECT(icon), "--xfdesktop-icon-view", icon_view);
g_object_ref(G_OBJECT(icon));
- if(!GTK_WIDGET_REALIZED(GTK_WIDGET(icon_view))) {
+ if(!gtk_widget_get_realized(GTK_WIDGET(icon_view))) {
/* if we aren't realized, we don't know what our grid looks like, so
* just hang onto the icon for later */
if(xfdesktop_icon_get_position(icon, &row, &col)) {
@@ -3849,7 +3918,7 @@ xfdesktop_icon_view_set_icon_size(XfdesktopIconView *icon_view,
icon_view->priv->icon_size = icon_size;
- if(GTK_WIDGET_REALIZED(icon_view)) {
+ if(gtk_widget_get_realized(GTK_WIDGET(icon_view))) {
xfdesktop_grid_do_resize(icon_view);
gtk_widget_queue_draw(GTK_WIDGET(icon_view));
}
@@ -3873,7 +3942,7 @@ xfdesktop_icon_view_set_font_size(XfdesktopIconView *icon_view,
icon_view->priv->font_size = font_size_points;
- if(GTK_WIDGET_REALIZED(icon_view)) {
+ if(gtk_widget_get_realized(GTK_WIDGET(icon_view))) {
xfdesktop_icon_view_modify_font_size(icon_view, font_size_points);
xfdesktop_grid_do_resize(icon_view);
gtk_widget_queue_draw(GTK_WIDGET(icon_view));
More information about the Xfce4-commits
mailing list