[Xfce4-commits] [xfce/xfdesktop] 01/34: Initial porting to Gtk 3
noreply at xfce.org
noreply at xfce.org
Sun Apr 16 07:06:35 CEST 2017
This is an automated email from the git hooks/post-receive script.
eric pushed a commit to branch master
in repository xfce/xfdesktop.
commit 7b76bb74c0b4956007f699507ec9a9c1a704c863
Author: florian.weigelt <florian.weigelt at mailbox.tu-dresden.de>
Date: Wed Feb 1 17:04:07 2017 +0100
Initial porting to Gtk 3
---
common/xfdesktop-common.h | 3 +-
configure.ac.in | 32 ++++----
settings/main.c | 3 +-
src/gtkcairoblur.c | 27 -------
src/xfce-backdrop.c | 3 +-
src/xfce-desktop.c | 187 +++++++++++++++++++-------------------------
src/xfce-desktop.h | 6 +-
src/xfdesktop-application.c | 6 +-
src/xfdesktop-icon-view.c | 101 +++++++++++++-----------
src/xfdesktop-window-icon.c | 3 +-
10 files changed, 163 insertions(+), 208 deletions(-)
diff --git a/common/xfdesktop-common.h b/common/xfdesktop-common.h
index 9e76e78..59aab6f 100644
--- a/common/xfdesktop-common.h
+++ b/common/xfdesktop-common.h
@@ -38,8 +38,7 @@
#define DEFAULT_BACKDROP DATADIR "/backgrounds/xfce/xfce-teal.jpg"
#define DEFAULT_ICON_FONT_SIZE 12
#define DEFAULT_ICON_SIZE 48
-#define ITHEME_FLAGS (GTK_ICON_LOOKUP_USE_BUILTIN \
- | GTK_ICON_LOOKUP_GENERIC_FALLBACK)
+#define ITHEME_FLAGS (GTK_ICON_LOOKUP_USE_BUILTIN)
#define LIST_TEXT "# xfce backdrop list"
#define XFDESKTOP_SELECTION_FMT "XFDESKTOP_SELECTION_%d"
diff --git a/configure.ac.in b/configure.ac.in
index 6a30789..6cd5d2a 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -5,7 +5,7 @@ dnl
dnl version info
m4_define([xfdesktop_version_major], [4])
-m4_define([xfdesktop_version_minor], [12])
+m4_define([xfdesktop_version_minor], [13])
m4_define([xfdesktop_version_micro], [0])
m4_define([xfdesktop_version_nano], [])
m4_define([xfdesktop_version_build], [@REVISION@])
@@ -13,18 +13,18 @@ m4_define([xfdesktop_version_tag],[git])
m4_define([xfdesktop_version], [xfdesktop_version_major().xfdesktop_version_minor().xfdesktop_version_micro()ifelse(xfdesktop_version_nano(), [], [], [.xfdesktop_version_nano()])ifelse(xfdesktop_version_tag(), [git], [xfdesktop_version_tag()-xfdesktop_version_build()], [xfdesktop_version_tag()])])
dnl minimum required versions
-m4_define([glib_minimum_version], [2.30.0])
-m4_define([gtk_minimum_version], [2.24.0])
-m4_define([libxfce4util_minimum_version], [4.10.0])
-m4_define([libxfce4ui_minimum_version], [4.11.1])
-m4_define([xfce_minimum_version], [4.10.0])
-m4_define([garcon_minimum_version], [0.1.2])
-m4_define([exo_minimum_version], [0.7.0])
+m4_define([glib_minimum_version], [2.42.0])
+m4_define([gtk_minimum_version], [3.22.0])
+m4_define([libxfce4util_minimum_version], [4.12.0])
+m4_define([libxfce4ui_minimum_version], [4.12.0])
+m4_define([xfce_minimum_version], [4.12.0])
+m4_define([garcon_minimum_version], [0.5.0])
+m4_define([exo_minimum_version], [0.10.2])
m4_define([thunar_minimum_version], [1.2.0])
m4_define([dbus_minimum_version], [0.84])
-m4_define([wnck_minimum_version], [2.30])
+m4_define([wnck_minimum_version], [3.20])
m4_define([intltool_minimum_version], [0.31])
-m4_define([xfconf_minimum_version], [4.10.0])
+m4_define([xfconf_minimum_version], [4.12.0])
m4_define([cairo_minimum_version], [1.6])
dnl define a short version string for xfdesktop
@@ -93,15 +93,15 @@ XDT_CHECK_PACKAGE([GIO], [gio-2.0], [glib_minimum_version])
XDT_CHECK_PACKAGE([GMODULE], [gmodule-2.0], [glib_minimum_version])
XDT_CHECK_PACKAGE([GOBJECT], [gobject-2.0], [glib_minimum_version])
XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [glib_minimum_version])
-XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [gtk_minimum_version])
+XDT_CHECK_PACKAGE([GTK], [gtk+-3.0], [gtk_minimum_version])
XDT_CHECK_PACKAGE([DBUS], [dbus-glib-1], [dbus_minimum_version])
XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0],
[libxfce4util_minimum_version])
-XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1],
+XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-2],
[libxfce4ui_minimum_version])
-XDT_CHECK_PACKAGE([LIBWNCK], [libwnck-1.0], [wnck_minimum_version])
+XDT_CHECK_PACKAGE([LIBWNCK], [libwnck-3.0], [wnck_minimum_version])
XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [xfconf_minimum_version])
-XDT_CHECK_PACKAGE([LIBEXO], [exo-1], [exo_minimum_version])
+XDT_CHECK_PACKAGE([LIBEXO], [exo-2], [exo_minimum_version])
XDT_CHECK_PACKAGE([CAIRO], [cairo], [cairo_minimum_version])
XDT_CHECK_OPTIONAL_PACKAGE([GIO_UNIX], [gio-unix-2.0], [glib_minimum_version], [gio-unix],
@@ -162,10 +162,10 @@ if test "x$ac_cv_enable_desktop_menu" = "xno"; then
build_desktop_menu="no"
else
dnl time for more abuse!
- XDT_CHECK_PACKAGE([GARCON], [garcon-1],
+ XDT_CHECK_PACKAGE([GARCON], [garcon-2],
[garcon_minimum_version], [build_desktop_menu="yes"],
[
-echo "*** Optional package garcon-1 was either not found on your system"
+echo "*** Optional package garcon-2 was either not found on your system"
echo "*** or is too old. Please install or upgrade to at least version"
echo "*** garcon_minimum_version, or adjust the PKG_CONFIG_PATH environment variable"
echo "*** if you installed the new version of the package in a nonstandard"
diff --git a/settings/main.c b/settings/main.c
index d44c6ef..46593af 100644
--- a/settings/main.c
+++ b/settings/main.c
@@ -42,6 +42,7 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gtk/gtk.h>
+#include <gtk/gtkx.h>
#include <gdk/gdkx.h>
#include <glib.h>
@@ -2051,7 +2052,7 @@ xfdesktop_settings_response(GtkWidget *dialog, gint response_id, gpointer user_d
}
}
-static GdkNativeWindow opt_socket_id = 0;
+static Window opt_socket_id = 0;
static gboolean opt_version = FALSE;
static gboolean opt_enable_debug = FALSE;
static GOptionEntry option_entries[] = {
diff --git a/src/gtkcairoblur.c b/src/gtkcairoblur.c
index 8d57120..2ad5eb8 100644
--- a/src/gtkcairoblur.c
+++ b/src/gtkcairoblur.c
@@ -172,33 +172,6 @@ _boxblur (guchar *buffer,
static const cairo_user_data_key_t original_cr_key;
-static gboolean
-gdk_cairo_get_clip_rectangle (cairo_t *cr,
- cairo_rectangle_int_t *rect)
-{
- double x1, y1, x2, y2;
- gboolean clip_exists;
-
- cairo_clip_extents (cr, &x1, &y1, &x2, &y2);
-
- clip_exists = x1 < x2 && y1 < y2;
-
- if (rect)
- {
- x1 = floor (x1);
- y1 = floor (y1);
- x2 = ceil (x2);
- y2 = ceil (y2);
-
- rect->x = CLAMP (x1, G_MININT, G_MAXINT);
- rect->y = CLAMP (y1, G_MININT, G_MAXINT);
- rect->width = CLAMP (x2 - x1, G_MININT, G_MAXINT);
- rect->height = CLAMP (y2 - y1, G_MININT, G_MAXINT);
- }
-
- return clip_exists;
-}
-
cairo_t *
gtk_css_shadow_value_start_drawing (cairo_t *cr, gdouble radius)
{
diff --git a/src/xfce-backdrop.c b/src/xfce-backdrop.c
index f9b5501..d451a9d 100644
--- a/src/xfce-backdrop.c
+++ b/src/xfce-backdrop.c
@@ -2114,7 +2114,8 @@ xfce_backdrop_loader_closed_cb(GdkPixbufLoader *loader,
}
backdrop->priv->animation = gdk_pixbuf_loader_get_animation(loader);
- backdrop->priv->animation_iter = gdk_pixbuf_animation_get_iter(backdrop->priv->animation, NULL);
+ if(GDK_IS_PIXBUF_ANIMATION(backdrop->priv->animation))
+ backdrop->priv->animation_iter = gdk_pixbuf_animation_get_iter(backdrop->priv->animation, NULL);
/* manually load the first frame */
xfce_backdrop_create_final_image(backdrop);
diff --git a/src/xfce-desktop.c b/src/xfce-desktop.c
index 8923bd2..892a5a0 100644
--- a/src/xfce-desktop.c
+++ b/src/xfce-desktop.c
@@ -96,7 +96,7 @@ struct _XfceDesktopPriv
XfconfChannel *channel;
gchar *property_prefix;
- GdkPixmap *bg_pixmap;
+ cairo_surface_t *bg_surface;
gint nworkspaces;
XfceWorkspace **workspaces;
@@ -161,12 +161,11 @@ static gboolean xfce_desktop_button_release_event(GtkWidget *widget,
GdkEventButton *evt);
static gboolean xfce_desktop_popup_menu(GtkWidget *widget);
-static gboolean xfce_desktop_expose(GtkWidget *w,
- GdkEventExpose *evt);
+static gboolean xfce_desktop_draw(GtkWidget *w,
+ cairo_t *cr);
static gboolean xfce_desktop_delete_event(GtkWidget *w,
GdkEventAny *evt);
-static void xfce_desktop_style_set(GtkWidget *w,
- GtkStyle *old_style);
+static void xfce_desktop_style_updated(GtkWidget *w);
static void xfce_desktop_set_single_workspace_mode(XfceDesktop *desktop,
gboolean single_workspace);
@@ -298,19 +297,20 @@ set_imgfile_root_property(XfceDesktop *desktop, const gchar *filename,
gdk_atom_intern(property_name, FALSE));
}
- gdk_error_trap_pop();
+ gdk_error_trap_pop_ignored();
}
static void
-set_real_root_window_pixmap(GdkScreen *gscreen,
- GdkPixmap *pmap)
+set_real_root_window_surface(GdkScreen *gscreen,
+ cairo_surface_t *surface)
{
#ifndef DISABLE_FOR_BUG7442
Window xid;
GdkWindow *groot;
+ cairo_pattern_t *pattern;
- xid = GDK_DRAWABLE_XID(pmap);
groot = gdk_screen_get_root_window(gscreen);
+ xid = GDK_WINDOW_XID(groot);
gdk_error_trap_push();
@@ -319,18 +319,21 @@ set_real_root_window_pixmap(GdkScreen *gscreen,
gdk_atom_intern("_XROOTPMAP_ID", FALSE),
gdk_atom_intern("PIXMAP", FALSE), 32,
GDK_PROP_MODE_REPLACE, (guchar *)&xid, 1);
- /* and set the root window's BG pixmap, because aterm is somewhat lame. */
- gdk_window_set_back_pixmap(groot, pmap, FALSE);
+ /* and set the root window's BG surface, because aterm is somewhat lame. */
+ pattern = cairo_pattern_create_for_surface(surface);
+ gdk_window_set_background_pattern(groot, pattern);
+ cairo_pattern_destroy(pattern);
/* there really should be a standard for this crap... */
- gdk_error_trap_pop();
+ gdk_error_trap_pop_ignored();
#endif
}
-static GdkPixmap *
-create_bg_pixmap(GdkScreen *gscreen, gpointer user_data)
+static cairo_surface_t *
+create_bg_surface(GdkScreen *gscreen, gpointer user_data)
{
XfceDesktop *desktop = user_data;
+ cairo_pattern_t *pattern;
gint w, h;
TRACE("entering");
@@ -338,7 +341,7 @@ create_bg_pixmap(GdkScreen *gscreen, gpointer user_data)
g_return_val_if_fail(XFCE_IS_DESKTOP(desktop), NULL);
/* If the workspaces haven't been created yet there's no need to do the
- * background pixmap */
+ * background surface */
if(desktop->priv->workspaces == NULL) {
XF_DEBUG("exiting, desktop->priv->workspaces == NULL");
return NULL;
@@ -351,28 +354,27 @@ create_bg_pixmap(GdkScreen *gscreen, gpointer user_data)
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(desktop->priv->bg_surface)
+ cairo_surface_destroy(desktop->priv->bg_surface);
+ desktop->priv->bg_surface = gdk_window_create_similar_surface(
+ gtk_widget_get_window(GTK_WIDGET(desktop)),
+ CAIRO_CONTENT_COLOR_ALPHA, w, h);
- if(!GDK_IS_PIXMAP(desktop->priv->bg_pixmap))
- return NULL;
-
- gdk_window_set_back_pixmap(gtk_widget_get_window(GTK_WIDGET(desktop)),
- desktop->priv->bg_pixmap, FALSE);
+ pattern = cairo_pattern_create_for_surface(desktop->priv->bg_surface);
+ gdk_window_set_background_pattern(gtk_widget_get_window(GTK_WIDGET(desktop)), pattern);
+ cairo_pattern_destroy(pattern);
- return desktop->priv->bg_pixmap;
+ return desktop->priv->bg_surface;
}
static void
backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data)
{
XfceDesktop *desktop = XFCE_DESKTOP(user_data);
- GdkPixmap *pmap = desktop->priv->bg_pixmap;
+ cairo_surface_t *surface = desktop->priv->bg_surface;
GdkScreen *gscreen = desktop->priv->gscreen;
GdkRectangle rect;
- GdkRegion *clip_region = NULL;
+ cairo_region_t *clip_region = NULL;
gint i, monitor = -1, current_workspace;
#ifdef G_ENABLE_DEBUG
gchar *monitor_name = NULL;
@@ -442,7 +444,7 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data)
if(monitor > 0
&& !xfce_workspace_get_xinerama_stretch(desktop->priv->workspaces[current_workspace])) {
- clip_region = gdk_region_rectangle(&rect);
+ clip_region = cairo_region_create_rectangle(&rect);
XF_DEBUG("clip_region: x: %d, y: %d, w: %d, h: %d",
rect.x, rect.y, rect.width, rect.height);
@@ -453,30 +455,30 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data)
*/
for(i = 0; i < monitor; i++) {
GdkRectangle previous_monitor;
- GdkRegion *previous_region;
+ cairo_region_t *previous_region;
gdk_screen_get_monitor_geometry(gscreen, i, &previous_monitor);
XF_DEBUG("previous_monitor: x: %d, y: %d, w: %d, h: %d",
previous_monitor.x, previous_monitor.y,
previous_monitor.width, previous_monitor.height);
- previous_region = gdk_region_rectangle(&previous_monitor);
+ previous_region = cairo_region_create_rectangle(&previous_monitor);
- gdk_region_subtract(clip_region, previous_region);
+ cairo_region_subtract(clip_region, previous_region);
- gdk_region_destroy(previous_region);
+ cairo_region_destroy(previous_region);
}
}
if(clip_region != NULL) {
/* Update the area to redraw to limit the icons/area painted */
- gdk_region_get_clipbox(clip_region, &rect);
+ cairo_region_get_extents(clip_region, &rect);
XF_DEBUG("area to update: x: %d, y: %d, w: %d, h: %d",
rect.x, rect.y, rect.width, rect.height);
}
if(rect.width != 0 && rect.height != 0) {
- /* get the composited backdrop pixmap */
+ /* get the composited backdrop pixbuf */
GdkPixbuf *pix = xfce_backdrop_get_pixbuf(backdrop);
cairo_t *cr;
@@ -485,26 +487,26 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data)
xfce_backdrop_generate_async(backdrop);
if(clip_region != NULL)
- gdk_region_destroy(clip_region);
+ cairo_region_destroy(clip_region);
return;
}
- /* Create the background pixmap if it isn't already */
- if(!GDK_IS_PIXMAP(pmap)) {
- pmap = create_bg_pixmap(gscreen, desktop);
+ /* Create the background surface if it isn't already */
+ if(!desktop->priv->bg_surface) {
+ surface = create_bg_surface(gscreen, desktop);
- if(!GDK_IS_PIXMAP(pmap)) {
+ if(!surface) {
g_object_unref(pix);
if(clip_region != NULL)
- gdk_region_destroy(clip_region);
+ cairo_region_destroy(clip_region);
return;
}
}
- cr = gdk_cairo_create(GDK_DRAWABLE(pmap));
+ cr = cairo_create(surface);
gdk_cairo_set_source_pixbuf(cr, pix, rect.x, rect.y);
/* clip the area so we don't draw over a previous wallpaper */
@@ -524,7 +526,7 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data)
monitor);
/* do this again so apps watching the root win notice the update */
- set_real_root_window_pixmap(gscreen, pmap);
+ set_real_root_window_surface(gscreen, surface);
g_object_unref(G_OBJECT(pix));
cairo_destroy(cr);
@@ -532,7 +534,7 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data)
}
if(clip_region != NULL)
- gdk_region_destroy(clip_region);
+ cairo_region_destroy(clip_region);
}
static void
@@ -551,10 +553,10 @@ screen_size_changed_cb(GdkScreen *gscreen, gpointer user_data)
if(current_workspace < 0)
return;
- /* release the bg_pixmap since the dimensions may have changed */
- if(desktop->priv->bg_pixmap) {
- g_object_unref(desktop->priv->bg_pixmap);
- desktop->priv->bg_pixmap = NULL;
+ /* release the bg_surface since the dimensions may have changed */
+ if(desktop->priv->bg_surface) {
+ cairo_surface_destroy(desktop->priv->bg_surface);
+ desktop->priv->bg_surface = NULL;
}
/* special case for 1 backdrop to handle xinerama stretching */
@@ -801,10 +803,10 @@ xfce_desktop_class_init(XfceDesktopClass *klass)
widget_class->unrealize = xfce_desktop_unrealize;
widget_class->button_press_event = xfce_desktop_button_press_event;
widget_class->button_release_event = xfce_desktop_button_release_event;
- widget_class->expose_event = xfce_desktop_expose;
+ widget_class->draw = xfce_desktop_draw;
widget_class->delete_event = xfce_desktop_delete_event;
widget_class->popup_menu = xfce_desktop_popup_menu;
- widget_class->style_set = xfce_desktop_style_set;
+ widget_class->style_updated = xfce_desktop_style_updated;
signals[SIG_POPULATE_ROOT_MENU] = g_signal_new("populate-root-menu",
XFCE_TYPE_DESKTOP,
@@ -1143,7 +1145,7 @@ xfce_desktop_unrealize(GtkWidget *widget)
#ifndef DISABLE_FOR_BUG7442
gdk_property_delete(groot, gdk_atom_intern("_XROOTPMAP_ID", FALSE));
gdk_property_delete(groot, gdk_atom_intern("ESETROOT_PMAP_ID", FALSE));
- gdk_window_set_back_pixmap(groot, NULL, FALSE);
+ gdk_window_set_back_background_pattern(groot, NULL);
#endif
if(desktop->priv->workspaces) {
@@ -1157,11 +1159,11 @@ xfce_desktop_unrealize(GtkWidget *widget)
}
gdk_flush();
- gdk_error_trap_pop();
+ gdk_error_trap_pop_ignored();
- if(desktop->priv->bg_pixmap) {
- g_object_unref(G_OBJECT(desktop->priv->bg_pixmap));
- desktop->priv->bg_pixmap = NULL;
+ if(desktop->priv->bg_surface) {
+ cairo_surface_destroy(desktop->priv->bg_surface);
+ desktop->priv->bg_surface = NULL;
}
gtk_window_set_icon(GTK_WINDOW(widget), NULL);
@@ -1195,11 +1197,12 @@ xfce_desktop_button_press_event(GtkWidget *w,
return FALSE;
#endif
/* no icons on the desktop, grab the focus and pop up the menu */
- if(!gtk_widget_has_grab(w))
+ if(!gtk_widget_has_grab(w)) {
gtk_grab_add(w);
- xfce_desktop_popup_root_menu(desktop, button, evt->time);
+ xfce_desktop_popup_root_menu(desktop, evt);
return TRUE;
+ }
} else if(button == 2 || (button == 1 && (state & GDK_SHIFT_MASK)
&& (state & GDK_CONTROL_MASK)))
{
@@ -1207,7 +1210,7 @@ xfce_desktop_button_press_event(GtkWidget *w,
if(!gtk_widget_has_grab(w))
gtk_grab_add(w);
- xfce_desktop_popup_secondary_root_menu(desktop, button, evt->time);
+ xfce_desktop_popup_secondary_root_menu(desktop, evt);
return TRUE;
}
}
@@ -1232,44 +1235,31 @@ static gboolean
xfce_desktop_popup_menu(GtkWidget *w)
{
GdkEventButton *evt;
- guint button, etime;
TRACE("entering");
evt = (GdkEventButton *)gtk_get_current_event();
- if(evt && GDK_BUTTON_PRESS == evt->type) {
- button = evt->button;
- etime = evt->time;
- } else {
- button = 0;
- etime = gtk_get_current_event_time();
- }
- xfce_desktop_popup_root_menu(XFCE_DESKTOP(w), button, etime);
+ xfce_desktop_popup_root_menu(XFCE_DESKTOP(w), evt);
- gdk_event_free((GdkEvent*)evt);
+ if(evt)
+ gdk_event_free((GdkEvent*)evt);
return TRUE;
}
static gboolean
-xfce_desktop_expose(GtkWidget *w,
- GdkEventExpose *evt)
+xfce_desktop_draw(GtkWidget *w,
+ cairo_t *cr)
{
GList *children, *l;
/*TRACE("entering");*/
- if(evt->count != 0)
- return FALSE;
-
- 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));
for(l = children; l; l = l->next) {
- gtk_container_propagate_expose(GTK_CONTAINER(w),
- GTK_WIDGET(l->data),
- evt);
+ gtk_container_propagate_draw(GTK_CONTAINER(w),
+ GTK_WIDGET(l->data),
+ cr);
}
g_list_free(children);
@@ -1291,6 +1281,7 @@ static gboolean
style_refresh_cb(gpointer *w)
{
XfceDesktop *desktop = XFCE_DESKTOP(w);
+ cairo_pattern_t *pattern;
gdouble old_font_size;
TRACE("entering");
@@ -1305,8 +1296,12 @@ style_refresh_cb(gpointer *w)
if(desktop->priv->workspaces == NULL)
return FALSE;
- if(GDK_IS_WINDOW(desktop->priv->bg_pixmap))
- gdk_window_set_back_pixmap(gtk_widget_get_window(GTK_WIDGET(desktop)), desktop->priv->bg_pixmap, FALSE);
+ if(desktop->priv->bg_surface) {
+ pattern = cairo_pattern_create_for_surface(desktop->priv->bg_surface);
+ gdk_window_set_background_pattern(gtk_widget_get_window(GTK_WIDGET(desktop)),
+ pattern);
+ cairo_pattern_destroy(pattern);
+ }
gtk_widget_queue_draw(GTK_WIDGET(desktop));
@@ -1330,7 +1325,7 @@ style_refresh_cb(gpointer *w)
#endif
static void
-xfce_desktop_style_set(GtkWidget *w, GtkStyle *old_style)
+xfce_desktop_style_updated(GtkWidget *w)
{
#ifdef ENABLE_DESKTOP_ICONS
XfceDesktop *desktop = XFCE_DESKTOP(w);
@@ -1703,8 +1698,7 @@ xfce_desktop_menu_destroy_idled(gpointer data)
static void
xfce_desktop_do_menu_popup(XfceDesktop *desktop,
- guint button,
- guint activate_time,
+ GdkEventButton *evt,
guint populate_signal)
{
GdkScreen *screen;
@@ -1737,42 +1731,25 @@ xfce_desktop_do_menu_popup(XfceDesktop *desktop,
gtk_menu_attach_to_widget(GTK_MENU(menu), GTK_WIDGET(desktop), NULL);
- /* Per gtk_menu_popup's documentation "for conflict-resolve initiation of
- * concurrent requests for mouse/keyboard grab requests." */
- if(activate_time == 0)
- activate_time = gtk_get_current_event_time();
-
- gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, button, activate_time);
+ gtk_menu_popup_at_pointer(GTK_MENU (menu), (GdkEvent *)evt);
}
void
xfce_desktop_popup_root_menu(XfceDesktop *desktop,
- guint button,
- guint activate_time)
+ GdkEventButton *evt)
{
TRACE("entering");
- /* If it's launched by xfdesktop --menu we won't have an event time.
- * Grab the keyboard focus */
- if(activate_time == 0)
- activate_time = xfdesktop_popup_keyboard_grab_available(gtk_widget_get_window(GTK_WIDGET(desktop)));
-
- xfce_desktop_do_menu_popup(desktop, button, activate_time,
+ xfce_desktop_do_menu_popup(desktop, evt,
signals[SIG_POPULATE_ROOT_MENU]);
}
void
xfce_desktop_popup_secondary_root_menu(XfceDesktop *desktop,
- guint button,
- guint activate_time)
+ GdkEventButton *evt)
{
- /* If it's launched by xfdesktop --windowlist we won't have an event time.
- * Grab the keyboard focus */
- if(activate_time == 0)
- activate_time = xfdesktop_popup_keyboard_grab_available(gtk_widget_get_window(GTK_WIDGET(desktop)));
-
- xfce_desktop_do_menu_popup(desktop, button, activate_time,
+ xfce_desktop_do_menu_popup(desktop, evt,
signals[SIG_POPULATE_SECONDARY_ROOT_MENU]);
}
diff --git a/src/xfce-desktop.h b/src/xfce-desktop.h
index 640b778..8055a07 100644
--- a/src/xfce-desktop.h
+++ b/src/xfce-desktop.h
@@ -105,11 +105,9 @@ void xfce_desktop_thaw_updates(XfceDesktop *desktop);
void xfce_desktop_popup_root_menu(XfceDesktop *desktop,
- guint button,
- guint activate_time);
+ GdkEventButton *evt);
void xfce_desktop_popup_secondary_root_menu(XfceDesktop *desktop,
- guint button,
- guint activate_time);
+ GdkEventButton *evt);
void xfce_desktop_refresh(XfceDesktop *desktop, gboolean advance_wallpaper);
diff --git a/src/xfdesktop-application.c b/src/xfdesktop-application.c
index 4152f84..f7e2cba 100644
--- a/src/xfdesktop-application.c
+++ b/src/xfdesktop-application.c
@@ -327,7 +327,7 @@ event_forward_to_rootwin(GdkScreen *gscreen, GdkEvent *event)
xev2.button = xev.button;
} else
return;
- xev.window = GDK_WINDOW_XWINDOW(gdk_screen_get_root_window(gscreen));
+ xev.window = GDK_WINDOW_XID(gdk_screen_get_root_window(gscreen));
xev.root = xev.window;
xev.subwindow = None;
xev.time = event->button.time;
@@ -511,10 +511,10 @@ cb_xfdesktop_application_menu(GAction *action,
if(popup_root_menu) {
xfce_desktop_popup_root_menu(XFCE_DESKTOP(app->desktops[screen_num]),
- 0, GDK_CURRENT_TIME);
+ NULL);
} else {
xfce_desktop_popup_secondary_root_menu(XFCE_DESKTOP(app->desktops[screen_num]),
- 0, GDK_CURRENT_TIME);
+ NULL);
}
}
diff --git a/src/xfdesktop-icon-view.c b/src/xfdesktop-icon-view.c
index 0148bf6..d7b20d7 100644
--- a/src/xfdesktop-icon-view.c
+++ b/src/xfdesktop-icon-view.c
@@ -236,12 +236,11 @@ static gboolean xfdesktop_icon_view_motion_notify(GtkWidget *widget,
static gboolean xfdesktop_icon_view_leave_notify(GtkWidget *widget,
GdkEventCrossing *evt,
gpointer user_data);
-static void xfdesktop_icon_view_style_set(GtkWidget *widget,
- GtkStyle *previous_style);
+static void xfdesktop_icon_view_style_updated(GtkWidget *widget);
static void xfdesktop_icon_view_realize(GtkWidget *widget);
static void xfdesktop_icon_view_unrealize(GtkWidget *widget);
-static gboolean xfdesktop_icon_view_expose(GtkWidget *widget,
- GdkEventExpose *evt);
+static gboolean xfdesktop_icon_view_draw(GtkWidget *widget,
+ cairo_t *cr);
static void xfdesktop_icon_view_drag_begin(GtkWidget *widget,
GdkDragContext *contest);
static gboolean xfdesktop_icon_view_drag_motion(GtkWidget *widget,
@@ -416,10 +415,10 @@ xfdesktop_icon_view_class_init(XfdesktopIconViewClass *klass)
gobject_class->set_property = xfce_icon_view_set_property;
gobject_class->get_property = xfce_icon_view_get_property;
- widget_class->style_set = xfdesktop_icon_view_style_set;
+ widget_class->style_updated = xfdesktop_icon_view_style_updated;
widget_class->realize = xfdesktop_icon_view_realize;
widget_class->unrealize = xfdesktop_icon_view_unrealize;
- widget_class->expose_event = xfdesktop_icon_view_expose;
+ widget_class->draw = xfdesktop_icon_view_draw;
widget_class->drag_begin = xfdesktop_icon_view_drag_begin;
widget_class->drag_motion = xfdesktop_icon_view_drag_motion;
widget_class->drag_drop = xfdesktop_icon_view_drag_drop;
@@ -689,7 +688,7 @@ xfdesktop_icon_view_class_init(XfdesktopIconViewClass *klass)
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,
+ xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_KP_Home, 0,
GTK_MOVEMENT_BUFFER_ENDS, -1);
xfdesktop_icon_view_add_move_binding(binding_set, GDK_KEY_End, 0,
@@ -962,7 +961,7 @@ xfdesktop_icon_view_button_press(GtkWidget *widget,
/* Since we're not over any icons this won't be the start of a
* drag so we can pop up menu */
if(evt->button == 3 || (evt->button == 1 && (evt->state & GDK_SHIFT_MASK))) {
- xfce_desktop_popup_root_menu(XFCE_DESKTOP(widget), evt->button, evt->time);
+ xfce_desktop_popup_root_menu(XFCE_DESKTOP(widget), evt);
return TRUE;
}
}
@@ -1068,8 +1067,10 @@ xfdesktop_icon_view_button_release(GtkWidget *widget,
* now.
* We pass 0 as the button because the docs say that you must use 0
* for pop ups other than button press events. */
- if(icon_l && (icon = icon_l->data))
- xfce_desktop_popup_root_menu(XFCE_DESKTOP(widget), 0, evt->time);
+ if(icon_l && (icon = icon_l->data)) {
+ evt->button = 0;
+ xfce_desktop_popup_root_menu(XFCE_DESKTOP(widget), evt);
+ }
}
if(evt->button == 1 && evt->state & GDK_CONTROL_MASK
@@ -1119,7 +1120,7 @@ xfdesktop_icon_view_key_press(GtkWidget *widget,
/* since we're NO_WINDOW, events don't get delivered to us normally,
* so we have to activate the bindings manually */
- return gtk_bindings_activate_event(GTK_OBJECT(icon_view), evt);
+ return gtk_bindings_activate_event(G_OBJECT(icon_view), evt);
}
static gboolean
@@ -1266,7 +1267,7 @@ xfdesktop_icon_view_motion_notify(GtkWidget *widget,
|| icon_view->priv->definitely_rubber_banding))
{
GdkRectangle old_rect, *new_rect, intersect;
- GdkRegion *region;
+ cairo_region_t *region;
GList *l;
/* we're dragging with no icon under the cursor -> rubber band start
@@ -1287,13 +1288,13 @@ xfdesktop_icon_view_motion_notify(GtkWidget *widget,
new_rect->width = ABS(evt->x - icon_view->priv->press_start_x) + 1;
new_rect->height = ABS(evt->y - icon_view->priv->press_start_y) + 1;
- region = gdk_region_rectangle(&old_rect);
- gdk_region_union_with_rect(region, new_rect);
+ region = cairo_region_create_rectangle(&old_rect);
+ cairo_region_union_rectangle(region, new_rect);
if(gdk_rectangle_intersect(&old_rect, new_rect, &intersect)
&& intersect.width > 2 && intersect.height > 2)
{
- GdkRegion *region_intersect;
+ cairo_region_t *region_intersect;
/* invalidate border too */
intersect.x += 1;
@@ -1301,13 +1302,13 @@ xfdesktop_icon_view_motion_notify(GtkWidget *widget,
intersect.y += 1;
intersect.height -= 2;
- region_intersect = gdk_region_rectangle(&intersect);
- gdk_region_subtract(region, region_intersect);
- gdk_region_destroy(region_intersect);
+ region_intersect = cairo_region_create_rectangle(&intersect);
+ cairo_region_subtract(region, region_intersect);
+ cairo_region_destroy(region_intersect);
}
gdk_window_invalidate_region(gtk_widget_get_window(widget), region, TRUE);
- gdk_region_destroy(region);
+ cairo_region_destroy(region);
/* update list of selected icons */
@@ -1912,8 +1913,7 @@ xfdesktop_icon_view_icon_theme_changed(GtkIconTheme *icon_theme,
}
static void
-xfdesktop_icon_view_style_set(GtkWidget *widget,
- GtkStyle *previous_style)
+xfdesktop_icon_view_style_updated(GtkWidget *widget)
{
XfdesktopIconView *icon_view = XFDESKTOP_ICON_VIEW(widget);
GtkWidget *dummy;
@@ -2009,8 +2009,7 @@ xfdesktop_icon_view_style_set(GtkWidget *widget,
NULL);
gtk_widget_destroy(dummy);
- GTK_WIDGET_CLASS(xfdesktop_icon_view_parent_class)->style_set(widget,
- previous_style);
+ GTK_WIDGET_CLASS(xfdesktop_icon_view_parent_class)->style_updated(widget);
/* do this after we're sure we have a style set */
if(!icon_view->priv->selection_box_color) {
@@ -2034,7 +2033,10 @@ xfdesktop_icon_view_realize(GtkWidget *widget)
gtk_widget_set_style(widget,
gtk_style_attach(gtk_widget_get_style(widget),
gtk_widget_get_window(widget)));
-
+ /* we need this call here to initalize some members of icon_view->priv,
+ * those depend on custom style properties */
+ xfdesktop_icon_view_style_updated(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. */
@@ -2058,7 +2060,7 @@ xfdesktop_icon_view_realize(GtkWidget *widget)
xfdesktop_setup_grids(icon_view);
/* unfortunately GTK_NO_WINDOW widgets don't receive events, with the
- * exception of expose events. */
+ * exception of draw events. */
gtk_widget_add_events(icon_view->priv->parent_window,
GDK_POINTER_MOTION_HINT_MASK | GDK_KEY_PRESS_MASK
| GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
@@ -2177,29 +2179,31 @@ xfdesktop_icon_view_unrealize(GtkWidget *widget)
}
static gboolean
-xfdesktop_icon_view_expose(GtkWidget *widget,
- GdkEventExpose *evt)
+xfdesktop_icon_view_draw(GtkWidget *widget,
+ cairo_t *cr)
{
XfdesktopIconView *icon_view = XFDESKTOP_ICON_VIEW(widget);
- GdkRectangle *rects = NULL;
+ cairo_rectangle_list_t *rects;
+ cairo_rectangle_int_t temp;
GdkRectangle clipbox;
- gint n_rects = 0, i;
+ gint i;
/*TRACE("entering");*/
- if(evt->count != 0)
+ rects = cairo_copy_clip_rectangle_list(cr);
+
+ if(rects->status != CAIRO_STATUS_SUCCESS) {
+ cairo_rectangle_list_destroy (rects);
return FALSE;
+ }
- gdk_region_get_rectangles(evt->region, &rects, &n_rects);
- gdk_region_get_clipbox(evt->region, &clipbox);
+ gdk_cairo_get_clip_rectangle(cr, &clipbox);
xfdesktop_icon_view_repaint_icons(icon_view, &clipbox);
if(icon_view->priv->definitely_rubber_banding) {
GdkRectangle intersect;
- cairo_t *cr;
- 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,
@@ -2210,10 +2214,16 @@ xfdesktop_icon_view_expose(GtkWidget *widget,
/* paint each rectangle in the expose region with the rubber
* band color, semi-transparently */
- for(i = 0; i < n_rects; ++i) {
- if(!gdk_rectangle_intersect(&rects[i],
- &icon_view->priv->band_rect,
- &intersect))
+ for(i = 0; i < rects->num_rectangles; ++i) {
+ /* rects only contains cairo_rectangle_t's (with double values) which we
+ cannot use in gdk_rectangle_intersect, so copy those values to temp.
+ If there is a better way please update this part */
+ temp.x = rects->rectangles[i].x;
+ temp.y = rects->rectangles[i].y;
+ temp.width = rects->rectangles[i].width;
+ temp.height = rects->rectangles[i].height;
+
+ if (!gdk_rectangle_intersect(&temp, &icon_view->priv->band_rect, &intersect))
{
continue;
}
@@ -2237,11 +2247,9 @@ xfdesktop_icon_view_expose(GtkWidget *widget,
cairo_restore(cr);
}
-
- cairo_destroy(cr);
}
- g_free(rects);
+ cairo_rectangle_list_destroy(rects);
return FALSE;
}
@@ -2745,7 +2753,7 @@ xfdesktop_setup_grids(XfdesktopIconView *icon_view)
new_size = (guint)icon_view->priv->nrows * icon_view->priv->ncols
* sizeof(XfdesktopIcon *);
- if(old_size == new_size) {
+ if(old_size == new_size && icon_view->priv->grid_layout != NULL) {
DBG("old_size == new_size exiting");
return;
}
@@ -3138,7 +3146,7 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view,
playout = icon_view->priv->playout;
- cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
+ cr = gdk_cairo_create(gtk_widget_get_window(widget));
if(!xfdesktop_icon_get_extents(icon, &pixbuf_extents,
&text_extents, &total_extents))
@@ -3228,9 +3236,8 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view,
text_extents.width, text_extents.height,
text_extents.x, text_extents.y);
- gtk_paint_layout(gtk_widget_get_style(widget), gtk_widget_get_window(widget),
- state, FALSE, area, widget, "label",
- text_extents.x, text_extents.y, playout);
+ gtk_render_layout(gtk_widget_get_style_context(widget), cr,
+ text_extents.x, text_extents.y, playout);
}
@@ -3575,7 +3582,7 @@ xfdesktop_get_workarea_single(XfdesktopIconView *icon_view,
break;
} while(bytes_after > 0);
- gdk_error_trap_pop();
+ gdk_error_trap_pop_ignored();
return ret;
}
diff --git a/src/xfdesktop-window-icon.c b/src/xfdesktop-window-icon.c
index e157afd..9bd8eea 100644
--- a/src/xfdesktop-window-icon.c
+++ b/src/xfdesktop-window-icon.c
@@ -27,7 +27,6 @@
#endif
#include <libwnck/libwnck.h>
-#include <libwnck/window-action-menu.h>
#include <libxfce4ui/libxfce4ui.h>
#include "xfdesktop-window-icon.h"
@@ -189,7 +188,7 @@ xfdesktop_window_icon_populate_context_menu(XfdesktopIcon *icon,
GtkWidget *menu)
{
XfdesktopWindowIcon *window_icon = XFDESKTOP_WINDOW_ICON(icon);
- GtkWidget *amenu = wnck_create_window_action_menu(window_icon->priv->window);
+ GtkWidget *amenu = wnck_action_menu_new(window_icon->priv->window);
GtkWidget *mi;
mi = gtk_menu_item_new_with_mnemonic(_("_Window Actions"));
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list