[mail-notification: 1/2] Ported the package to use GTK3

epienbro epienbro at fedoraproject.org
Fri Feb 11 22:26:04 UTC 2011


commit ea205ed45de5bc5645d9d1726d5359317b30d1d2
Author: Erik van Pienbroek <epienbro at fedoraproject.org>
Date:   Fri Feb 11 23:24:35 2011 +0100

    Ported the package to use GTK3
    
    - Ported the package to use GTK3 (as that's used by evolution on F15)
    - Replaced the libglade pieces by GtkBuilder
    - Dropped the dependency on libgnomeui (but keep the libgnome dep for now)
    - Some things might still be broken due to this port. Feel free to report any issues

 mail-notification-5.4-evolution-3-0-support.patch |   50 +
 mail-notification-5.4-gtk3-support.patch          | 1334 +++++++++++++++++++++
 mail-notification.spec                            |   32 +-
 3 files changed, 1413 insertions(+), 3 deletions(-)
---
diff --git a/mail-notification-5.4-evolution-3-0-support.patch b/mail-notification-5.4-evolution-3-0-support.patch
index 472594c..51a0eb5 100644
--- a/mail-notification-5.4-evolution-3-0-support.patch
+++ b/mail-notification-5.4-evolution-3-0-support.patch
@@ -18,3 +18,53 @@
        jb_message_result_string(plugindir ? plugindir : "not found");
  
        if (! plugindir)
+--- src/mn-evolution-plugin.c.orig	2011-02-09 00:07:37.422002566 +0100
++++ src/mn-evolution-plugin.c	2011-02-09 00:12:43.652678682 +0100
+@@ -25,6 +25,7 @@
+ #include <dbus/dbus-glib-lowlevel.h>
+ #include <dbus/dbus-glib-bindings.h>
+ #include <camel/camel.h>
++#include <libedataserver/eds-version.h>
+ #include <mail/em-event.h>
+ #include <mail/mail-tools.h>
+ #include "mn-evolution.h"
+@@ -249,10 +250,16 @@
+ {
+   if (evo_server)
+     {
+-      char *url;
++#if EDS_CHECK_VERSION(2,91,0)
++      const char *url = camel_folder_get_uri(message->folder);
++#else
++      char *url = mail_tools_folder_to_url(message->folder);
++#endif
+ 
+-      url = mail_tools_folder_to_url(message->folder);
+       mn_evolution_server_message_reading(evo_server, url);
++
++#if !EDS_CHECK_VERSION(2,91,0)
+       g_free(url);
++#endif
+     }
+ }
+--- build/src/mn-evolution-server.c.orig	2011-02-09 00:17:38.850944227 +0100
++++ build/src/mn-evolution-server.c	2011-02-09 22:21:54.155346478 +0100
+@@ -496,11 +496,15 @@
+ 
+     if (! folder)
+       {
+-	folder = mail_tool_uri_to_folder(uri, 0,
+ #if EDS_CHECK_VERSION(2,91,0)
+-	      NULL,
++        static EMailSession * session = NULL;
++        if (!session)
++          session = e_mail_session_new();
++
++        folder = e_mail_session_uri_to_folder_sync(session, uri, 0, NULL, NULL);
++#else
++	folder = mail_tool_uri_to_folder(uri, 0, NULL);
+ #endif
+-	      NULL);
+ 	if (folder)
+ 	  self_cache_folder(uri, folder);
+ 	else
diff --git a/mail-notification-5.4-gtk3-support.patch b/mail-notification-5.4-gtk3-support.patch
new file mode 100644
index 0000000..edbc5dd
--- /dev/null
+++ b/mail-notification-5.4-gtk3-support.patch
@@ -0,0 +1,1334 @@
+--- build/src/mn-dialog.c.orig	2011-02-02 23:08:09.816659245 +0100
++++ build/src/mn-dialog.c	2011-02-02 23:09:16.988113774 +0100
+@@ -106,8 +106,7 @@
+ #line 27 "src/mn-dialog.gob"
+ 
+     gtk_container_set_border_width(GTK_CONTAINER(self), 5);
+-    gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE);
+-    gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(self)->vbox), 2);
++    gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(self))), 2);
+   
+ #line 113 "mn-dialog.c"
+  }
+--- jbsrc/jb.c.orig	2011-02-02 23:40:33.567924712 +0100
++++ jbsrc/jb.c	2011-02-02 23:39:39.680803618 +0100
+@@ -163,7 +163,7 @@
+ {
+   jb_check_glibc();
+ 
+-  jb_require_packages("GNOME", "gnome", "glib-2.0 >= 2.14 gthread-2.0 gconf-2.0 >= 2.4.0 gtk+-2.0 >= 2.12 libgnomeui-2.0 >= 2.14.0 gnome-vfs-2.0 libglade-2.0 libxml-2.0 libnotify >= 0.4.1");
++  jb_require_packages("GNOME", "gnome", "glib-2.0 >= 2.14 gthread-2.0 gconf-2.0 >= 2.4.0 gtk+-3.0 libgnome-2.0 >= 2.14.0 gnome-vfs-2.0 libxml-2.0 libnotify >= 0.4.1");
+   jb_require_packages("D-Bus", "dbus", "dbus-glib-1");
+ 
+   jb_check_packages_for_options("GMime", "gmime", "gmime-2.6",
+--- build/src/mn-file-chooser-button.c.orig	2011-02-02 23:38:01.503049512 +0100
++++ build/src/mn-file-chooser-button.c	2011-02-02 23:38:16.988222034 +0100
+@@ -358,7 +358,7 @@
+ 	g_signal_connect(selfp->dialog, "response", G_CALLBACK(self_response_h), self);
+       }
+ 
+-    if (! GTK_WIDGET_VISIBLE(selfp->dialog))
++    if (! gtk_widget_get_visible(selfp->dialog))
+       {
+ 	GtkWindow *parent;
+ 
+--- build/src/mn-sound-player.c.orig	2011-02-02 23:55:02.436500397 +0100
++++ build/src/mn-sound-player.c	2011-02-02 23:55:09.125141055 +0100
+@@ -27,7 +27,7 @@
+ #include <sys/types.h>
+ #include <signal.h>
+ #include <glib/gi18n.h>
+-#include <gnome.h>
++#include <libgnome/libgnome.h>
+ #include "mn-conf.h"
+ #include "mn-locked-callback.h"
+ #include "mn-util.h"
+--- build/src/mn-file-chooser-button.c.orig	2011-02-02 23:55:21.857457045 +0100
++++ build/src/mn-file-chooser-button.c	2011-02-02 23:55:30.422996901 +0100
+@@ -25,7 +25,7 @@
+ #line 39 "src/mn-file-chooser-button.gob"
+ 
+ #include <glib/gi18n.h>
+-#include <gnome.h>
++#include <libgnome/libgnome.h>
+ #include "mn-util.h"
+ 
+ #line 32 "mn-file-chooser-button.c"
+--- build/src/mn-message.c.orig	2011-02-02 23:55:41.160420099 +0100
++++ build/src/mn-message.c	2011-02-02 23:55:47.755065850 +0100
+@@ -26,7 +26,7 @@
+ 
+ #include <errno.h>
+ #include <glib/gi18n.h>
+-#include <gnome.h>
++#include <libgnome/libgnome.h>
+ #include <libgnomevfs/gnome-vfs.h>
+ #include "mn-conf.h"
+ #include "mn-util.h"
+--- build/src/mn-file-chooser-button.c.orig	2011-02-03 00:15:16.178407712 +0100
++++ build/src/mn-file-chooser-button.c	2011-02-03 00:18:17.865681563 +0100
+@@ -463,6 +463,7 @@
+ 
+     GDK_THREADS_ENTER();
+ 
++#if 0
+     if (results)
+       {
+ 	GnomeVFSGetFileInfoResult *result = results->data;
+@@ -494,6 +495,7 @@
+ 	      }
+ 	  }
+       }
++#endif
+ 
+     selfp->async_handle = NULL;
+     g_object_unref(self);
+--- build/src/mn-evolution-folder-tree-server.c.orig	2011-02-07 20:17:09.574274620 +0100
++++ build/src/mn-evolution-folder-tree-server.c	2011-02-07 20:23:25.196053994 +0100
+@@ -25,6 +25,7 @@
+ #line 24 "src/mn-evolution-folder-tree-server.gob"
+ 
+ #include <dbus/dbus.h>
++#include <gtk/gtkx.h>
+ #include <libedataserver/eds-version.h>
+ #if !EDS_CHECK_VERSION(2,29,0)
+ #include <mail/mail-component.h>
+@@ -71,7 +72,7 @@
+ static void mn_evolution_folder_tree_server_finalize (MNEvolutionFolderTreeServer * self);
+ #line 70 "mn-evolution-folder-tree-server.c"
+ #line 84 "src/mn-evolution-folder-tree-server.gob"
+-static void mn_evolution_folder_tree_server_plug_destroy_h (GtkObject * object, gpointer user_data);
++static void mn_evolution_folder_tree_server_plug_destroy_h (GtkWidget * object, gpointer user_data);
+ #line 73 "mn-evolution-folder-tree-server.c"
+ #line 104 "src/mn-evolution-folder-tree-server.gob"
+ static void mn_evolution_folder_tree_server_selected_h (EMFolderTree * tree, const char * full_name, const char * uri, guint32 flags, gpointer user_data);
+@@ -456,7 +457,7 @@
+     selfp->tree = em_folder_tree_new_with_model(model);
+ #endif
+ 
+-    selfp->plug = gtk_plug_new((GdkNativeWindow) selfp->id);
++    selfp->plug = gtk_plug_new((Window) selfp->id);
+     gtk_container_add(GTK_CONTAINER(selfp->plug), selfp->tree);
+     gtk_widget_show_all(selfp->plug);
+ 
+@@ -490,7 +491,7 @@
+ 
+ #line 84 "src/mn-evolution-folder-tree-server.gob"
+ static void 
+-mn_evolution_folder_tree_server_plug_destroy_h (GtkObject * object, gpointer user_data)
++mn_evolution_folder_tree_server_plug_destroy_h (GtkWidget * object, gpointer user_data)
+ {
+ #line 482 "mn-evolution-folder-tree-server.c"
+ #define __GOB_FUNCTION__ "MN:Evolution:Folder:Tree:Server::plug_destroy_h"
+--- src/eggtrayicon.h.orig	2011-02-07 20:25:26.352057350 +0100
++++ src/eggtrayicon.h	2011-02-07 20:27:54.495032920 +0100
+@@ -23,10 +23,9 @@
+ #ifndef __EGG_TRAY_ICON_H__
+ #define __EGG_TRAY_ICON_H__
+ 
+-#include <gtk/gtkplug.h>
+-#ifdef GDK_WINDOWING_X11
++#include <gtk/gtk.h>
++#include <gtk/gtkx.h>
+ #include <gdk/gdkx.h>
+-#endif
+ 
+ G_BEGIN_DECLS
+ 
+--- build/src/mn-mail-icon.c.orig	2011-02-07 20:24:58.971663075 +0100
++++ build/src/mn-mail-icon.c	2011-02-07 20:30:33.714401306 +0100
+@@ -833,11 +833,13 @@
+ #line 239 "src/mn-mail-icon.gob"
+ 	
+     GtkWidget *widget = user_data;
++    GtkAllocation allocation;
+ 
+-    gdk_window_get_origin(widget->window, x, y);
++    gdk_window_get_origin(gtk_widget_get_window(widget), x, y);
++    gtk_widget_get_allocation(widget, &allocation);
+ 
+-    *x += widget->allocation.x;
+-    *y += widget->allocation.y;
++    *x += allocation.x;
++    *y += allocation.y;
+ 
+     if (*y > gdk_screen_get_height(gtk_widget_get_screen(widget)) / 2)
+       {
+@@ -847,7 +849,7 @@
+ 	*y -= req.height;
+       }
+     else
+-      *y += widget->allocation.height;
++      *y += allocation.height;
+ 
+     *push_in = TRUE;
+   }}
+--- build/src/mn-mail-icon-widget.c.orig	2011-02-07 20:31:19.475816763 +0100
++++ build/src/mn-mail-icon-widget.c	2011-02-07 21:53:48.858814715 +0100
+@@ -64,9 +64,13 @@
+ #line 65 "mn-mail-icon-widget.c"
+ #line 110 "src/mn-mail-icon-widget.gob"
+ static void ___7_mn_mail_icon_widget_size_request (GtkWidget * widget, GtkRequisition * requisition);
++static void
++mn_mail_icon_widget_get_preferred_width(GtkWidget *widget, gint  *minimal_width, gint *natural_width);
++static void
++mn_mail_icon_widget_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height);
+ #line 68 "mn-mail-icon-widget.c"
+ #line 132 "src/mn-mail-icon-widget.gob"
+-static gboolean ___8_mn_mail_icon_widget_expose_event (GtkWidget * widget, GdkEventExpose * event);
++static gboolean ___8_mn_mail_icon_widget_draw (GtkWidget * widget, cairo_t *cr);
+ #line 71 "mn-mail-icon-widget.c"
+ #line 244 "src/mn-mail-icon-widget.gob"
+ static GdkPixbuf * mn_mail_icon_widget_render_icon (MNMailIconWidget * self);
+@@ -187,9 +191,10 @@
+ 	parent_class = g_type_class_ref (GTK_TYPE_WIDGET);
+ 
+ #line 110 "src/mn-mail-icon-widget.gob"
+-	gtk_widget_class->size_request = ___7_mn_mail_icon_widget_size_request;
++	gtk_widget_class->get_preferred_width = mn_mail_icon_widget_get_preferred_width;
++	gtk_widget_class->get_preferred_height = mn_mail_icon_widget_get_preferred_height;
+ #line 132 "src/mn-mail-icon-widget.gob"
+-	gtk_widget_class->expose_event = ___8_mn_mail_icon_widget_expose_event;
++	gtk_widget_class->draw = ___8_mn_mail_icon_widget_draw;
+ #line 194 "mn-mail-icon-widget.c"
+ 	g_object_class->dispose = ___dispose;
+ 	g_object_class->finalize = ___finalize;
+@@ -234,7 +239,7 @@
+  {
+ #line 93 "src/mn-mail-icon-widget.gob"
+ 
+-    GTK_WIDGET_SET_FLAGS(self, GTK_NO_WINDOW);
++    gtk_widget_set_has_window(GTK_WIDGET(self), FALSE);
+ 
+     gtk_widget_set_name(GTK_WIDGET(self), "mn-mail-icon");
+ 
+@@ -457,9 +462,28 @@
+ #undef __GOB_FUNCTION__
+ #undef PARENT_HANDLER
+ 
++static void
++mn_mail_icon_widget_get_preferred_width(GtkWidget *widget, gint  *minimal_width, gint *natural_width)
++{
++    GtkRequisition requisition;
++
++    ___7_mn_mail_icon_widget_size_request (widget, &requisition);
++    *minimal_width = *natural_width = requisition.width;
++}
++
++static void
++mn_mail_icon_widget_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height)
++{
++    GtkRequisition requisition;
++
++    ___7_mn_mail_icon_widget_size_request (widget, &requisition);
++
++    *minimal_height = *natural_height = requisition.height;
++}
++
+ #line 132 "src/mn-mail-icon-widget.gob"
+ static gboolean 
+-___8_mn_mail_icon_widget_expose_event (GtkWidget * widget G_GNUC_UNUSED, GdkEventExpose * event)
++___8_mn_mail_icon_widget_draw (GtkWidget * widget G_GNUC_UNUSED, cairo_t *cr)
+ #line 464 "mn-mail-icon-widget.c"
+ #define PARENT_HANDLER(___widget,___event) \
+ 	((GTK_WIDGET_CLASS(parent_class)->expose_event)? \
+@@ -472,7 +496,7 @@
+ 	
+     Self *self = SELF(widget);
+ 
+-    if (! GTK_WIDGET_DRAWABLE(widget) || ! selfp->stock_id)
++    if (! gtk_widget_is_drawable(widget) || ! selfp->stock_id)
+       return FALSE;
+ 
+     if (selfp->is_on)
+@@ -480,23 +504,34 @@
+ 	int x;
+ 	int y;
+ 	GdkRectangle image_area;
++        GtkAllocation allocation;
++        GtkRequisition requisition;
+ 
+ 	/* note: widget->requisition is the pixbuf size, see size_request() */
+ 
+-	x = floor(widget->allocation.x + ((widget->allocation.width - widget->requisition.width) * ICON_XALIGN));
+-	y = floor(widget->allocation.y + ((widget->allocation.height - widget->requisition.height) * ICON_YALIGN));
++        gtk_widget_get_allocation(widget, &allocation);
++        gtk_widget_get_requisition(widget, &requisition);
++
++	x = floor(allocation.x + ((allocation.width - requisition.width) * ICON_XALIGN));
++	y = floor(allocation.y + ((allocation.height - requisition.height) * ICON_YALIGN));
+ 
+ 	image_area.x = x;
+ 	image_area.y = y;
+-	image_area.width = widget->requisition.width;
+-	image_area.height = widget->requisition.height;
++	image_area.width = requisition.width;
++	image_area.height = requisition.height;
+ 
++#if 0
+ 	if (gdk_rectangle_intersect(&event->area, &image_area, &image_area))
++#endif
+ 	  {
+ 	    GdkPixbuf *pixbuf;
+ 
+ 	    pixbuf = self_render_icon(self);
++            gdk_cairo_set_source_pixbuf(cr, pixbuf, image_area.x, image_area.y);
++            cairo_move_to(cr, image_area.x - x, image_area.y - y);
++            cairo_paint(cr);
+ 
++#if 0
+ 	    gdk_draw_pixbuf(widget->window,
+ 			    NULL,
+ 			    pixbuf,
+@@ -509,6 +544,7 @@
+ 			    GDK_RGB_DITHER_NORMAL,
+ 			    0,
+ 			    0);
++#endif
+ 
+ 	    g_object_unref(pixbuf);
+ 	  }
+@@ -523,13 +559,16 @@
+ 	int box_y;
+ 	int box_width;
+ 	int box_height;
++        GtkAllocation allocation;
++
++        gtk_widget_get_allocation(widget, &allocation);
+ 
+ 	if (! selfp->count_layout)
+ 	  {
+ 	    const char *size;
+ 	    char *markup;
+ 
+-	    if (widget->allocation.height < 32)
++	    if (allocation.height < 32)
+ 	      size = "small";
+ 	    else
+ 	      size = "medium";
+@@ -546,17 +585,16 @@
+ 	box_width = count_rect.width + COUNT_BOX_XPAD * 2;
+ 	box_height = count_rect.height + COUNT_BOX_YPAD * 2;
+ 
+-	box_x = widget->allocation.x + widget->allocation.width - box_width - COUNT_BOX_XMARGIN;
+-	box_y = widget->allocation.y + widget->allocation.height - box_height - COUNT_BOX_YMARGIN;
++	box_x = allocation.x + allocation.width - box_width - COUNT_BOX_XMARGIN;
++	box_y = allocation.y + allocation.height - box_height - COUNT_BOX_YMARGIN;
+ 
+ 	count_x = box_x - count_rect.x + COUNT_BOX_XPAD;
+ 	count_y = box_y - count_rect.y + COUNT_BOX_YPAD;
+ 
+-	gtk_paint_box(widget->style,
+-		      widget->window,
+-		      GTK_WIDGET_STATE(widget),
++	gtk_paint_box(gtk_widget_get_style(widget),
++		      cr,
++		      gtk_widget_get_state_flags(widget),
+ 		      GTK_SHADOW_OUT,
+-		      &event->area,
+ 		      widget,
+ 		      NULL,
+ 		      box_x,
+@@ -564,11 +602,10 @@
+ 		      box_width,
+ 		      box_height);
+ 
+-	gtk_paint_layout(widget->style,
+-			 widget->window,
+-			 GTK_WIDGET_STATE(widget),
++	gtk_paint_layout(gtk_widget_get_style(widget),
++			 cr,
++			 gtk_widget_get_state_flags(widget),
+ 			 FALSE,
+-			 &event->area,
+ 			 widget,
+ 			 NULL,
+ 			 count_x,
+--- build/src/mn-mailbox-properties-dialog.c.orig	2011-02-07 21:57:31.257251776 +0100
++++ build/src/mn-mailbox-properties-dialog.c	2011-02-07 21:56:56.989854854 +0100
+@@ -456,7 +456,7 @@
+     MNMailboxProperties *properties;
+ 
+     mn_container_create_interface(GTK_CONTAINER(self),
+-				  PKGDATADIR G_DIR_SEPARATOR_S "mailbox-properties-dialog.glade",
++				  PKGDATADIR G_DIR_SEPARATOR_S "mailbox-properties-dialog.ui",
+ 				  "notebook",
+ 				  "mn_mailbox_properties_dialog_",
+ 				  "notebook", &self->notebook,
+@@ -1290,7 +1290,7 @@
+ {
+ #line 686 "src/mn-mailbox-properties-dialog.gob"
+ 	
+-    if (GTK_WIDGET_IS_SENSITIVE(GTK_WINDOW(self)->default_widget))
++    if (gtk_widget_is_sensitive(gtk_window_get_default_widget(GTK_WINDOW(self))))
+       gtk_window_activate_default(GTK_WINDOW(self));
+     else
+       {
+@@ -1313,9 +1313,9 @@
+ 	    if (elem->data == entry)
+ 	      break;
+ 
+-	    if (GTK_WIDGET_MAPPED(elem->data)
+-		&& GTK_WIDGET_VISIBLE(elem->data)
+-		&& GTK_WIDGET_SENSITIVE(elem->data))
++	    if (gtk_widget_get_mapped(elem->data)
++		&& gtk_widget_get_visible(elem->data)
++		&& gtk_widget_get_sensitive(elem->data))
+ 	      next = elem->data;
+ 	  }
+ 	while (! next);
+--- build/src/mn-mailbox-view.c.orig	2011-02-07 22:18:49.962462920 +0100
++++ build/src/mn-mailbox-view.c	2011-02-07 23:01:39.990363248 +0100
+@@ -412,23 +412,23 @@
+     binding_set = gtk_binding_set_by_class(class);
+ 
+     /* Delete removes a row */
+-    gtk_binding_entry_add_signal(binding_set, GDK_Delete, 0, "activate-remove", 0);
+-    gtk_binding_entry_add_signal(binding_set, GDK_KP_Delete, 0, "activate-remove", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_Delete, 0, "activate-remove", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_KP_Delete, 0, "activate-remove", 0);
+ 
+     /* HIG 2.0 cut/copy/paste shortcuts */
+-    gtk_binding_entry_add_signal(binding_set, GDK_x, GDK_CONTROL_MASK, "activate-cut", 0);
+-    gtk_binding_entry_add_signal(binding_set, GDK_c, GDK_CONTROL_MASK, "activate-copy", 0);
+-    gtk_binding_entry_add_signal(binding_set, GDK_v, GDK_CONTROL_MASK, "activate-paste", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_x, GDK_CONTROL_MASK, "activate-cut", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_c, GDK_CONTROL_MASK, "activate-copy", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_v, GDK_CONTROL_MASK, "activate-paste", 0);
+ 
+     /* cut/copy/paste shortcuts taken from gtkentry.c */
+-    gtk_binding_entry_add_signal(binding_set, GDK_Delete, GDK_SHIFT_MASK, "activate-cut", 0);
+-    gtk_binding_entry_add_signal(binding_set, GDK_Insert, GDK_CONTROL_MASK, "activate-copy", 0);
+-    gtk_binding_entry_add_signal(binding_set, GDK_Insert, GDK_SHIFT_MASK, "activate-paste", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_Delete, GDK_SHIFT_MASK, "activate-cut", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_Insert, GDK_CONTROL_MASK, "activate-copy", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK, "activate-paste", 0);
+ 
+     /* HIG 2.0 properties */
+-    gtk_binding_entry_add_signal(binding_set, GDK_Return, GDK_MOD1_MASK, "activate-properties", 0);
+-    gtk_binding_entry_add_signal(binding_set, GDK_ISO_Enter, GDK_MOD1_MASK, "activate-properties", 0);
+-    gtk_binding_entry_add_signal(binding_set, GDK_KP_Enter, GDK_MOD1_MASK, "activate-properties", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_Return, GDK_MOD1_MASK, "activate-properties", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_ISO_Enter, GDK_MOD1_MASK, "activate-properties", 0);
++    gtk_binding_entry_add_signal(binding_set, GDK_KEY_KP_Enter, GDK_MOD1_MASK, "activate-properties", 0);
+   
+ #line 434 "mn-mailbox-view.c"
+  }
+@@ -934,14 +934,13 @@
+ #line 183 "src/mn-mailbox-view.gob"
+ 	
+     GtkSelectionData *data;
+-
+     data = gtk_clipboard_wait_for_contents(global_clipboard, clipboard_info[TARGET_MAILBOXES].atom);
+     if (data)
+       {
+ 	GSList *configurations;
+ 	GSList *l;
+ 
+-	memcpy(&configurations, data->data, data->length);
++	memcpy(&configurations, gtk_selection_data_get_data(data), gtk_selection_data_get_length(data));
+ 
+ 	MN_LIST_FOREACH(l, configurations)
+ 	  {
+@@ -962,14 +961,14 @@
+     data = gtk_clipboard_wait_for_contents(global_clipboard, clipboard_info[TARGET_GNOME_COPIED_FILES].atom);
+     if (data)
+       {
+-	if (data->format == 8 && data->length > 0)
++	if (gtk_selection_data_get_format(data) == 8 && gtk_selection_data_get_length(data) > 0)
+ 	  {
+ 	    char *gnome_copied_files;
+ 	    gboolean status;
+ 	    MNGnomeCopiedFilesType type;
+ 	    GSList *uri_list;
+ 
+-	    gnome_copied_files = g_strndup(data->data, data->length);
++	    gnome_copied_files = g_strndup(gtk_selection_data_get_data(data), gtk_selection_data_get_length(data));
+ 	    status = mn_parse_gnome_copied_files(gnome_copied_files, &type, &uri_list);
+ 	    g_free(gnome_copied_files);
+ 
+--- build/src/mn-shell.c.orig	2011-02-07 23:02:17.852293679 +0100
++++ build/src/mn-shell.c	2011-02-07 23:04:39.223548403 +0100
+@@ -158,7 +158,7 @@
+ static void mn_shell_icon_activate_about_h (MNMailIcon * icon, gpointer user_data);
+ #line 160 "mn-shell.c"
+ #line 499 "src/mn-shell.gob"
+-static void mn_shell_icon_destroy_h (GtkObject * object, gpointer user_data);
++static void mn_shell_icon_destroy_h (GtkWidget * object, gpointer user_data);
+ #line 163 "mn-shell.c"
+ #line 508 "src/mn-shell.gob"
+ static void mn_shell_update_sensitivity (MNShell * self);
+@@ -1006,7 +1006,7 @@
+ 
+ #line 499 "src/mn-shell.gob"
+ static void 
+-mn_shell_icon_destroy_h (GtkObject * object, gpointer user_data)
++mn_shell_icon_destroy_h (GtkWidget * object, gpointer user_data)
+ {
+ #line 1004 "mn-shell.c"
+ #define __GOB_FUNCTION__ "MN:Shell::icon_destroy_h"
+--- build/src/mn-text-table.c.orig	2011-02-07 23:05:08.799927792 +0100
++++ build/src/mn-text-table.c	2011-02-07 23:18:06.480056895 +0100
+@@ -69,9 +69,11 @@
+ #line 70 "mn-text-table.c"
+ #line 104 "src/mn-text-table.gob"
+ static void ___4_mn_text_table_size_request (GtkWidget * widget, GtkRequisition * requisition);
++static void mn_text_table_get_preferred_width (GtkWidget * widget, gint * minimal_width, gint * natural_width);
++static void mn_text_table_get_preferred_height (GtkWidget * widget, gint * minimal_height, gint * natural_height);
+ #line 73 "mn-text-table.c"
+ #line 115 "src/mn-text-table.gob"
+-static gboolean ___5_mn_text_table_expose_event (GtkWidget * widget, GdkEventExpose * event);
++static gboolean ___5_mn_text_table_draw (GtkWidget * widget, cairo_t *cr);
+ #line 76 "mn-text-table.c"
+ #line 165 "src/mn-text-table.gob"
+ static void mn_text_table_set_dirty (MNTextTable * self);
+@@ -188,9 +190,10 @@
+ 	parent_class = g_type_class_ref (GTK_TYPE_WIDGET);
+ 
+ #line 104 "src/mn-text-table.gob"
+-	gtk_widget_class->size_request = ___4_mn_text_table_size_request;
++        gtk_widget_class->get_preferred_width = mn_text_table_get_preferred_width;
++        gtk_widget_class->get_preferred_height = mn_text_table_get_preferred_height;
+ #line 115 "src/mn-text-table.gob"
+-	gtk_widget_class->expose_event = ___5_mn_text_table_expose_event;
++	gtk_widget_class->draw = ___5_mn_text_table_draw;
+ #line 257 "src/mn-text-table.gob"
+ 	c->clear = ___real_mn_text_table_clear;
+ #line 197 "mn-text-table.c"
+@@ -216,7 +219,7 @@
+  {
+ #line 80 "src/mn-text-table.gob"
+ 
+-    GTK_WIDGET_SET_FLAGS(self, GTK_NO_WINDOW);
++    gtk_widget_set_has_window(GTK_WIDGET(self), FALSE);
+ 
+     g_object_connect(self,
+ 		     "swapped-signal::style-set", self_context_changed, self,
+@@ -290,9 +293,29 @@
+ #undef __GOB_FUNCTION__
+ #undef PARENT_HANDLER
+ 
++static void
++mn_text_table_get_preferred_width (GtkWidget * widget, gint * minimal_width, gint * natural_width)
++{
++    GtkRequisition requisition;
++
++    ___4_mn_text_table_size_request (widget, &requisition);
++
++    *minimal_width = *natural_width = requisition.width;
++}
++
++static void
++mn_text_table_get_preferred_height (GtkWidget * widget, gint * minimal_height, gint * natural_height)
++{
++    GtkRequisition requisition;
++
++    ___4_mn_text_table_size_request (widget, &requisition);
++
++    *minimal_height = *natural_height = requisition.height;
++}
++
+ #line 115 "src/mn-text-table.gob"
+ static gboolean 
+-___5_mn_text_table_expose_event (GtkWidget * widget G_GNUC_UNUSED, GdkEventExpose * event)
++___5_mn_text_table_draw (GtkWidget * widget G_GNUC_UNUSED, cairo_t *cr)
+ #line 297 "mn-text-table.c"
+ #define PARENT_HANDLER(___widget,___event) \
+ 	((GTK_WIDGET_CLASS(parent_class)->expose_event)? \
+@@ -304,10 +327,14 @@
+ #line 117 "src/mn-text-table.gob"
+ 	
+     Self *self = SELF(widget);
++    GtkAllocation allocation;
+     int i;
+-    int y = widget->allocation.y;
++    int y;
++
++    gtk_widget_get_allocation(widget, &allocation);
++    y = allocation.y;
+ 
+-    if (! GTK_WIDGET_DRAWABLE(widget))
++    if (! gtk_widget_is_drawable(widget))
+       return FALSE;
+ 
+     self_relayout(self);
+@@ -316,7 +343,7 @@
+       {
+ 	Row *row = g_ptr_array_index(selfp->rows, i);
+ 	int j;
+-	int x = widget->allocation.x;
++	int x = allocation.x;
+ 	int column = 0;
+ 
+ 	MN_ARRAY_FOREACH(j, row->cells)
+@@ -324,11 +351,10 @@
+ 	    MNTextTableCell *cell = g_ptr_array_index(row->cells, j);
+ 
+ 	    if (cell->layout)
+-	      gtk_paint_layout(widget->style,
+-			       widget->window,
+-			       GTK_WIDGET_STATE(widget),
++	      gtk_paint_layout(gtk_widget_get_style(widget),
++			       cr,
++			       gtk_widget_get_state_flags(widget),
+ 			       FALSE,
+-			       &event->area,
+ 			       widget,
+ 			       NULL,
+ 			       x,
+--- build/src/mn-tooltips.c.orig	2011-02-07 23:19:05.903761972 +0100
++++ build/src/mn-tooltips.c	2011-02-07 23:41:19.368621912 +0100
+@@ -104,7 +104,7 @@
+ static void mn_tooltips_set_tip_widget_real (MNTooltips * self, GtkWidget * widget, GtkWidget * tip_widget, int border_width);
+ #line 106 "mn-tooltips.c"
+ #line 287 "src/mn-tooltips.gob"
+-static gboolean mn_tooltips_paint_window (MNTooltips * self);
++static gboolean mn_tooltips_paint_window (MNTooltips * self, cairo_t *cr);
+ #line 109 "mn-tooltips.c"
+ #line 308 "src/mn-tooltips.gob"
+ static void mn_tooltips_draw_tips (MNTooltips * self);
+@@ -430,7 +430,7 @@
+ 	gtk_container_set_border_width(GTK_CONTAINER(selfp->window), selfp->border_width);
+ 
+ 	g_signal_connect_swapped(selfp->window,
+-				 "expose-event",
++				 "draw",
+ 				 G_CALLBACK(self_paint_window),
+ 				 self);
+ 
+@@ -490,7 +490,7 @@
+ 
+     if (selfp->active_data
+ 	&& selfp->active_data->widget == widget
+-	&& GTK_WIDGET_DRAWABLE(selfp->active_data->widget))
++	&& gtk_widget_is_drawable(selfp->active_data->widget))
+       {
+ 	if (data->tip_widget)
+ 	  g_object_unref(data->tip_widget);
+@@ -594,7 +594,7 @@
+ 
+ #line 287 "src/mn-tooltips.gob"
+ static gboolean 
+-mn_tooltips_paint_window (MNTooltips * self)
++mn_tooltips_paint_window (MNTooltips * self, cairo_t *cr)
+ {
+ #line 600 "mn-tooltips.c"
+ #define __GOB_FUNCTION__ "MN:Tooltips::paint_window"
+@@ -608,13 +608,12 @@
+ 	
+     GtkRequisition req;
+ 
+-    gtk_widget_size_request(selfp->window, &req);
+-    gtk_paint_flat_box(selfp->window->style,
+-		       selfp->window->window,
++    gtk_widget_size_request(GTK_WIDGET(selfp), &req);
++    gtk_paint_flat_box(gtk_widget_get_style(GTK_WIDGET(selfp)),
++		       cr,
+ 		       GTK_STATE_NORMAL,
+ 		       GTK_SHADOW_OUT,
+ 		       NULL,
+-		       selfp->window,
+ 		       "tooltip",
+ 		       0,
+ 		       0,
+@@ -651,10 +650,11 @@
+     gint monitor_num, px, py;
+     GdkRectangle monitor;
+     int screen_width;
++    GtkAllocation allocation;
+ 
+     if (! selfp->window)
+       self_force_window(self);
+-    else if (GTK_WIDGET_VISIBLE(selfp->window))
++    else if (gtk_widget_get_visible(selfp->window))
+       g_get_current_time(&selfp->last_popdown);
+ 
+     gtk_widget_ensure_style(selfp->window);
+@@ -670,7 +670,7 @@
+ 
+     data = selfp->active_data;
+ 
+-    child = GTK_BIN(selfp->window)->child;
++    child = gtk_bin_get_child(GTK_BIN(selfp->window));
+     if (child)
+       gtk_container_remove(GTK_CONTAINER(selfp->window), child);
+ 
+@@ -684,14 +684,16 @@
+     w = requisition.width;
+     h = requisition.height;
+ 
+-    gdk_window_get_origin(widget->window, &x, &y);
+-    if (GTK_WIDGET_NO_WINDOW(widget))
++    gtk_widget_get_allocation(selfp->window, &allocation);
++
++    gdk_window_get_origin(gtk_widget_get_window(widget), &x, &y);
++    if (! gtk_widget_get_has_window(widget))
+       {
+-	x += widget->allocation.x;
+-	y += widget->allocation.y;
++	x += allocation.x;
++	y += allocation.y;
+       }
+ 
+-    x += widget->allocation.width / 2;
++    x += allocation.width / 2;
+ 
+     if (! keyboard_mode)
+       gdk_window_get_pointer(gdk_screen_get_root_window(screen), &x, NULL, NULL);
+@@ -712,11 +714,11 @@
+     else if (x < monitor.x)
+       x = monitor.x;
+ 
+-    if ((y + h + widget->allocation.height + 4) > monitor.y + monitor.height
++    if ((y + h + allocation.height + 4) > monitor.y + monitor.height
+ 	&& (y - 4) > monitor.y)
+       y = y - h - 4;
+     else
+-      y = y + widget->allocation.height + 4;
++      y = y + allocation.height + 4;
+ 
+     /*
+      * The following block is not part of GTK+ and has been added to
+@@ -760,7 +762,7 @@
+ 	
+     Self *self = SELF(data);
+ 
+-    if (selfp->active_data && GTK_WIDGET_DRAWABLE(selfp->active_data->widget))
++    if (selfp->active_data && gtk_widget_is_drawable(selfp->active_data->widget))
+       self_draw_tips(self);
+ 
+     selfp->timeout_id = 0;
+@@ -785,7 +787,7 @@
+ 	
+     if (selfp->window)
+       {
+-	if (GTK_WIDGET_VISIBLE(selfp->window))
++	if (gtk_widget_get_visible(selfp->window))
+ 	  g_get_current_time(&selfp->last_popdown);
+ 	gtk_widget_hide(selfp->window);
+       }
+@@ -802,7 +804,7 @@
+ 	{
+ 	  TooltipsData *data = l->data;
+ 
+-	  if (data->widget == widget && GTK_WIDGET_DRAWABLE(widget))
++	  if (data->widget == widget && gtk_widget_is_drawable(widget))
+ 	    {
+ 	      selfp->active_data = data;
+ 	      break;
+@@ -937,7 +939,7 @@
+ 
+     if (GTK_IS_WINDOW(toplevel))
+       {
+-	GtkWidget *focus = GTK_WINDOW(toplevel)->focus_widget;
++	GtkWidget *focus = gtk_window_get_focus(GTK_WINDOW(toplevel));
+ 
+ 	g_object_set_data(G_OBJECT(toplevel), TOOLTIPS_KEYBOARD_MODE, GINT_TO_POINTER(TRUE));
+ 
+@@ -966,7 +968,7 @@
+ 
+     if (GTK_IS_WINDOW(toplevel))
+       {
+-	GtkWidget *focus = GTK_WINDOW(toplevel)->focus_widget;
++	GtkWidget *focus = gtk_window_get_focus(GTK_WINDOW(toplevel));
+ 
+ 	if (focus)
+ 	  self_hide_tip(focus);
+@@ -1057,24 +1059,24 @@
+ 	    break;
+ 
+ 	  case GDK_ENTER_NOTIFY:
+-	    if (! (GTK_IS_MENU_ITEM(widget) && GTK_MENU_ITEM(widget)->submenu))
++	    if (! (GTK_IS_MENU_ITEM(widget) && gtk_menu_item_get_submenu(GTK_MENU_ITEM(widget))))
+ 	      self_start_delay(self, widget);
+ 	    break;
+ 
+ 	  case GDK_LEAVE_NOTIFY:
+ 	    self_set_active_widget(self, NULL);
+-	    selfp->use_sticky_delay = selfp->window && GTK_WIDGET_VISIBLE(selfp->window);
++	    selfp->use_sticky_delay = selfp->window && gtk_widget_get_visible(selfp->window);
+ 	    break;
+ 
+ 	  case GDK_MOTION_NOTIFY:
+ 	    /* Handle menu items specially ... pend popup for each motion
+ 	     * on other widgets, we ignore motion.
+ 	     */
+-	    if (GTK_IS_MENU_ITEM(widget) && ! GTK_MENU_ITEM(widget)->submenu)
++	    if (GTK_IS_MENU_ITEM(widget) && ! gtk_menu_item_get_submenu(GTK_MENU_ITEM(widget)))
+ 	      {
+ 		/* Completely evil hack to make sure we get the LEAVE_NOTIFY
+ 		 */
+-		GTK_PRIVATE_SET_FLAG(widget, GTK_LEAVE_PENDING);
++		//GTK_PRIVATE_SET_FLAG(widget, GTK_LEAVE_PENDING);
+ 		self_set_active_widget(self, NULL);
+ 		self_start_delay(self, widget);
+ 		break;
+--- src/nautilus-cell-renderer-pixbuf-emblem.c.orig	2011-02-08 00:16:43.847831409 +0100
++++ src/nautilus-cell-renderer-pixbuf-emblem.c	2011-02-08 00:32:59.128682767 +0100
+@@ -368,6 +368,10 @@
+ 	gint pixbuf_height = 0;
+ 	gint calc_width;
+ 	gint calc_height;
++	int xpad;
++	int ypad;
++	gfloat xalign;
++	gfloat yalign;
+ 
+ 	if (!cellpixbuf->pixbuf && cellinfo->stock_id)
+ 		nautilus_cell_renderer_pixbuf_emblem_create_stock_pixbuf (cellpixbuf, widget);
+@@ -385,8 +389,11 @@
+ 		pixbuf_height = MAX (pixbuf_height, gdk_pixbuf_get_height (cellpixbuf->pixbuf_expander_closed));
+ 	}
+ 
+-	calc_width  = (gint) cell->xpad * 2 + pixbuf_width;
+-	calc_height = (gint) cell->ypad * 2 + pixbuf_height;
++	gtk_cell_renderer_get_padding(cell, &xpad, &ypad);
++	gtk_cell_renderer_get_alignment(cell, &xalign, &yalign);
++
++	calc_width  = (gint) xpad * 2 + pixbuf_width;
++	calc_height = (gint) ypad * 2 + pixbuf_height;
+ 
+ 	if (x_offset) *x_offset = 0;
+ 	if (y_offset) *y_offset = 0;
+@@ -394,14 +401,14 @@
+ 	if (cell_area && pixbuf_width > 0 && pixbuf_height > 0) {
+ 		if (x_offset) {
+ 			*x_offset = (((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ?
+-				1.0 - cell->xalign : cell->xalign) *
+-				(cell_area->width - calc_width - 2 * cell->xpad));
+-			*x_offset = MAX (*x_offset, 0) + cell->xpad;
++				1.0 - xalign : xalign) *
++				(cell_area->width - calc_width - 2 * xpad));
++			*x_offset = MAX (*x_offset, 0) + xpad;
+ 		}
+ 		if (y_offset) {
+-			*y_offset = (cell->yalign *
+-				(cell_area->height - calc_height - 2 * cell->ypad));
+-			*y_offset = MAX (*y_offset, 0) + cell->ypad;
++			*y_offset = (yalign *
++				(cell_area->height - calc_height - 2 * ypad));
++			*y_offset = MAX (*y_offset, 0) + ypad;
+ 		}
+ 	}
+ 
+@@ -429,13 +436,19 @@
+ 	GdkRectangle pix_emblem_rect;
+ 	GdkRectangle draw_rect;
+ 	gboolean stock_pixbuf = FALSE;
++	gboolean is_expander = FALSE;
++	gboolean is_expanded = FALSE;
++	int xpad;
++	int ypad;
++
++	g_object_get(cell, "is-expander", &is_expander, "is-expanded", &is_expanded, NULL);
+ 
+ 	pixbuf = cellpixbuf->pixbuf;
+-	if (cell->is_expander) {
+-		if (cell->is_expanded &&
++	if (is_expander) {
++		if (is_expanded &&
+ 		    cellpixbuf->pixbuf_expander_open != NULL) {
+ 			pixbuf = cellpixbuf->pixbuf_expander_open;
+-		} else if (!cell->is_expanded &&
++		} else if (!is_expanded &&
+ 			   cellpixbuf->pixbuf_expander_closed != NULL) {
+ 			pixbuf = cellpixbuf->pixbuf_expander_closed;
+ 		}
+@@ -456,15 +469,18 @@
+ 	if (stock_pixbuf)
+ 		pixbuf = cellpixbuf->pixbuf;
+ 
++	gtk_cell_renderer_get_padding(cell, &xpad, &ypad);
++
+ 	pix_rect.x += cell_area->x;
+ 	pix_rect.y += cell_area->y;
+-	pix_rect.width  -= cell->xpad * 2;
+-	pix_rect.height -= cell->ypad * 2;
++	pix_rect.width  -= xpad * 2;
++	pix_rect.height -= ypad * 2;
+ 
+ 	if (gdk_rectangle_intersect (cell_area, &pix_rect, &draw_rect) &&
+ 	    gdk_rectangle_intersect (expose_area, &draw_rect, &draw_rect)) {
++#if 0
+ 		gdk_draw_pixbuf (window,
+-			widget->style->black_gc,
++			gtk_widget_get_style(widget)->black_gc,
+ 			pixbuf,
+ 			/* pixbuf 0, 0 is at pix_rect.x, pix_rect.y */
+ 			draw_rect.x - pix_rect.x,
+@@ -475,6 +491,13 @@
+ 			draw_rect.height,
+ 			GDK_RGB_DITHER_NORMAL,
+ 			0, 0);
++#endif
++
++		cairo_t *cr = gdk_cairo_create (window);
++		cairo_move_to (cr, draw_rect.x - pix_rect.x, draw_rect.y - pix_rect.y);
++		gdk_cairo_set_source_pixbuf (cr, pixbuf, draw_rect.x, draw_rect.y);
++		cairo_paint (cr);
++		cairo_destroy (cr);
+ 	}
+ 
+ 	if (cellpixbuf->pixbuf_emblem) {
+@@ -484,6 +507,7 @@
+ 		pix_emblem_rect.y = pix_rect.y + pix_rect.height - pix_emblem_rect.height;
+ 		if (gdk_rectangle_intersect (cell_area, &pix_emblem_rect, &draw_rect) &&
+ 		    gdk_rectangle_intersect (expose_area, &draw_rect, &draw_rect)) {
++#if 0
+ 			gdk_draw_pixbuf (window,
+ 				widget->style->black_gc,
+ 				cellpixbuf->pixbuf_emblem,
+@@ -496,6 +520,13 @@
+ 				draw_rect.height,
+ 				GDK_RGB_DITHER_NORMAL,
+ 				0, 0);
++#endif
++
++			cairo_t *cr = gdk_cairo_create (window);
++			cairo_move_to (cr, draw_rect.x - pix_emblem_rect.x, draw_rect.y - pix_emblem_rect.y);
++			gdk_cairo_set_source_pixbuf (cr, cellpixbuf->pixbuf_emblem, draw_rect.x, draw_rect.y);
++			cairo_paint (cr);
++			cairo_destroy (cr);
+ 		}
+ 	}
+ }
+--- src/nautilus-cell-renderer-pixbuf-emblem.h.orig	2011-02-07 22:18:12.336471764 +0100
++++ src/nautilus-cell-renderer-pixbuf-emblem.h	2011-02-08 00:20:30.461758697 +0100
+@@ -25,18 +25,18 @@
+ #ifndef NAUTILUS_CELL_RENDERER_PIXBUF_EMBLEM_H
+ #define NAUTILUS_CELL_RENDERER_PIXBUF_EMBLEM_H
+ 
+-#include <gtk/gtkcellrenderer.h>
++#include <gtk/gtk.h>
+ 
+ #define NAUTILUS_TYPE_CELL_RENDERER_PIXBUF_EMBLEM \
+ 	(nautilus_cell_renderer_pixbuf_emblem_get_type ())
+ #define NAUTILUS_CELL_RENDERER_PIXBUF_EMBLEM(obj) \
+-	(GTK_CHECK_CAST ((obj), NAUTILUS_TYPE_CELL_RENDERER_PIXBUF_EMBLEM, NautilusCellRendererPixbufEmblem))
++	(G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_CELL_RENDERER_PIXBUF_EMBLEM, NautilusCellRendererPixbufEmblem))
+ #define NAUTILUS_CELL_RENDERER_PIXBUF_EMBLEM_CLASS(klass) \
+-	(GTK_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_CELL_RENDERER_PIXBUF_EMBLEM, NautilusCellRendererPixbufEmblemClass))
++	(G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_CELL_RENDERER_PIXBUF_EMBLEM, NautilusCellRendererPixbufEmblemClass))
+ #define NAUTILUS_IS_CELL_RENDERER_PIXBUF_EMBLEM(obj) \
+-	(GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_CELL_RENDERER_PIXBUF_EMBLEM))
++	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_CELL_RENDERER_PIXBUF_EMBLEM))
+ #define NAUTILUS_IS_CELL_RENDERER_PIXBUF_EMBLEM_CLASS(klass) \
+-	(GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_CELL_RENDERER_PIXBUF_EMBLEM))
++	(G_TYPE_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_CELL_RENDERER_PIXBUF_EMBLEM))
+ 
+ typedef struct _NautilusCellRendererPixbufEmblem NautilusCellRendererPixbufEmblem;
+ typedef struct _NautilusCellRendererPixbufEmblemClass NautilusCellRendererPixbufEmblemClass;
+--- build/src/mn-authenticated-mailbox.c.orig	2011-02-08 00:34:16.332610802 +0100
++++ build/src/mn-authenticated-mailbox.c	2011-02-08 00:36:23.706936717 +0100
+@@ -25,7 +25,7 @@
+ #line 29 "src/mn-authenticated-mailbox.gob"
+ 
+ #include <glib/gi18n.h>
+-#include <gnome.h>
++#include <libgnome/libgnome.h>
+ #include "mn-mailbox-private.h"
+ #include "mn-shell.h"
+ #include "mn-util.h"
+@@ -859,6 +859,7 @@
+ 
+     /* keep the title in sync with gnome-authentication-manager */
+ 
++#if 0
+     /* translators: header capitalization */
+     selfp->auth_dialog = gnome_password_dialog_new(_("Authentication Required"),
+ 						   message,
+@@ -891,6 +892,9 @@
+     gtk_widget_destroy(selfp->auth_dialog);
+ 
+     return ok;
++#else
++    return FALSE;
++#endif
+   }}
+ #line 896 "mn-authenticated-mailbox.c"
+ #undef __GOB_FUNCTION__
+--- build/src/mn-about-dialog.c.orig	2011-02-08 22:20:54.469841262 +0100
++++ build/src/mn-about-dialog.c	2011-02-08 22:21:13.309839037 +0100
+@@ -111,9 +111,11 @@
+  {
+ #line 32 "src/mn-about-dialog.gob"
+ 
++#if 0
+     gtk_about_dialog_set_email_hook(self_activate_link_cb, "mailto:", NULL);
+     gtk_about_dialog_set_url_hook(self_activate_link_cb, NULL, NULL);
+-  
++#endif
++
+ #line 118 "mn-about-dialog.c"
+  }
+ }
+--- build/src/mn-autodetect-mailbox-properties.c.orig	2011-02-08 22:21:58.639427345 +0100
++++ build/src/mn-autodetect-mailbox-properties.c	2011-02-08 22:22:43.564035901 +0100
+@@ -355,10 +355,9 @@
+ 
+     toplevel = gtk_widget_get_toplevel(GTK_WIDGET(button));
+     /* translators: header capitalization */
+-    selfp->chooser = gtk_file_chooser_dialog_new_with_backend(_("Select a File or Folder"),
++    selfp->chooser = gtk_file_chooser_dialog_new(_("Select a File or Folder"),
+ 							      GTK_WINDOW(toplevel),
+ 							      GTK_FILE_CHOOSER_ACTION_OPEN,
+-							      "gnome-vfs",
+ 							      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ 							      GTK_STOCK_OPEN, 1,
+ 							      NULL);
+--- build/src/mn-pi-mailbox-properties.c.orig	2011-02-08 22:30:08.051375715 +0100
++++ build/src/mn-pi-mailbox-properties.c	2011-02-08 22:30:21.398665261 +0100
+@@ -415,7 +415,7 @@
+     int i;
+ 
+     for (i = 0; i < MN_PI_MAILBOX_N_CONNECTION_TYPES; i++)
+-      gtk_widget_set_sensitive(self->port_spin[i], GTK_WIDGET_SENSITIVE(self->conn_radio[i]) && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self->conn_radio[i])));
++      gtk_widget_set_sensitive(self->port_spin[i], gtk_widget_get_sensitive(self->conn_radio[i]) && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self->conn_radio[i])));
+ 
+     g_object_notify(G_OBJECT(self), "complete");
+   }}
+--- src/eggtrayicon.c.orig	2011-02-07 23:42:30.405791829 +0100
++++ src/eggtrayicon.c	2011-02-08 23:06:16.092968325 +0100
+@@ -25,7 +25,7 @@
+ 
+ #include "eggtrayicon.h"
+ 
+-#include <gdkconfig.h>
++#include <gdk/gdk.h>
+ #if defined (GDK_WINDOWING_X11)
+ #include <gdk/gdkx.h>
+ #include <X11/Xatom.h>
+@@ -258,7 +258,7 @@
+     {
+       GdkWindow *gdkwin;
+ 
+-      gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget),
++      gdkwin = gdk_x11_window_lookup_for_display (gtk_widget_get_display (widget),
+                                               icon->manager_window);
+ 
+       gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
+@@ -290,7 +290,7 @@
+   ev.window = window;
+   ev.message_type = icon->system_tray_opcode_atom;
+   ev.format = 32;
+-  ev.data.l[0] = gdk_x11_get_server_time (GTK_WIDGET (icon)->window);
++  ev.data.l[0] = gdk_x11_get_server_time (gtk_widget_get_window(GTK_WIDGET (icon)));
+   ev.data.l[1] = message;
+   ev.data.l[2] = data1;
+   ev.data.l[3] = data2;
+@@ -342,12 +342,12 @@
+     {
+       GdkWindow *gdkwin;
+ 
+-      gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
++      gdkwin = gdk_x11_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
+ 					      icon->manager_window);
+ 
+       gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);
+ 
+-      if (dock_if_realized && GTK_WIDGET_REALIZED (icon))
++      if (dock_if_realized && gtk_widget_get_realized (GTK_WIDGET(icon)))
+ 	egg_tray_icon_send_dock_request (icon);
+ 
+       egg_tray_icon_get_orientation_property (icon);
+@@ -355,10 +355,16 @@
+ }
+ 
+ static gboolean
+-transparent_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
++transparent_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
+ {
+-  gdk_window_clear_area (widget->window, event->area.x, event->area.y,
++#if 0
++  gdk_window_clear_area (gtk_widget_get_window(widget), event->area.x, event->area.y,
+ 			 event->area.width, event->area.height);
++#endif
++  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
++  //gdk_cairo_region (cr, event->region);
++  cairo_fill (cr);
++
+   return FALSE;
+ }
+ 
+@@ -366,20 +372,20 @@
+ make_transparent_again (GtkWidget *widget, GtkStyle *previous_style,
+ 			gpointer user_data)
+ {
+-  gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
++  //gdk_window_set_back_pixmap (gtk_widget_get_window(widget), NULL, TRUE);
+ }
+ 
+ static void
+ make_transparent (GtkWidget *widget, gpointer user_data)
+ {
+-  if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget))
++  if (! gtk_widget_get_has_window (widget) || gtk_widget_get_app_paintable (widget))
+     return;
+ 
+   gtk_widget_set_app_paintable (widget, TRUE);
+   gtk_widget_set_double_buffered (widget, FALSE);
+-  gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
+-  g_signal_connect (widget, "expose_event",
+-		    G_CALLBACK (transparent_expose_event), NULL);
++  //gdk_window_set_back_pixmap (gtk_widget_get_window(widget), NULL, TRUE);
++  g_signal_connect (widget, "draw",
++		    G_CALLBACK (transparent_draw), NULL);
+   g_signal_connect_after (widget, "style_set",
+ 			  G_CALLBACK (make_transparent_again), NULL);
+ }
+@@ -391,7 +397,7 @@
+ 
+   g_return_if_fail (icon->manager_window != None);
+ 
+-  gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
++  gdkwin = gdk_x11_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
+ 					  icon->manager_window);
+ 
+   gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
+--- build/src/mn-properties-dialog.c.orig	2011-02-08 23:37:12.605200174 +0100
++++ build/src/mn-properties-dialog.c	2011-02-08 23:37:18.601881191 +0100
+@@ -183,7 +183,7 @@
+     GtkTreeSelection *selection;
+ 
+     mn_container_create_interface(GTK_CONTAINER(self),
+-				  PKGDATADIR G_DIR_SEPARATOR_S "properties-dialog.glade",
++				  PKGDATADIR G_DIR_SEPARATOR_S "properties-dialog.ui",
+ 				  "main_vbox",
+ 				  "mn_properties_dialog_",
+ 				  "notebook", &selfp->notebook,
+--- src/mn-util.c.orig	2011-02-08 00:01:25.167207512 +0100
++++ src/mn-util.c	2011-02-09 00:01:35.718285446 +0100
+@@ -26,8 +26,7 @@
+ #include <gmodule.h>
+ #include <glib/gi18n.h>
+ #include <gobject/gvaluecollector.h>
+-#include <gnome.h>
+-#include <glade/glade.h>
++#include <libgnome/libgnome.h>
+ #include "mn-util.h"
+ #include "mn-mailboxes.h"
+ #include "mn-shell.h"
+@@ -303,49 +302,55 @@
+   return pixbuf;
+ }
+ 
+-static GladeXML *
++static GtkBuilder *
+ mn_glade_xml_new (const char *filename, const char *root, const char *domain)
+ {
+-  GladeXML *xml;
++  GtkBuilder *builder;
++  GError *err = NULL;
+ 
+   g_return_val_if_fail(filename != NULL, NULL);
+ 
+-  xml = glade_xml_new(filename, root, domain);
+-  if (! xml)
+-    mn_show_fatal_error_dialog(NULL, "Unable to load interface \"%s\".", filename);
++  builder = gtk_builder_new();
++  gtk_builder_set_translation_domain(builder, domain);
++  if (! gtk_builder_add_from_file(builder, filename, &err)) {
++    mn_show_fatal_error_dialog(NULL, "Unable to load interface \"%s\": %s.", filename, err->message);
++    g_error_free(err);
++    g_object_unref(builder);
++    return NULL;
++  }
+ 
+-  return xml;
++  return builder;
+ }
+ 
+ static GtkWidget *
+-mn_glade_xml_get_widget (GladeXML *xml, const char *widget_name)
++mn_glade_xml_get_widget (GtkBuilder *builder, const char *widget_name)
+ {
+   GtkWidget *widget;
+ 
+-  g_return_val_if_fail(GLADE_IS_XML(xml), NULL);
++  g_return_val_if_fail(GTK_IS_BUILDER(builder), NULL);
+   g_return_val_if_fail(widget_name != NULL, NULL);
+ 
+-  widget = glade_xml_get_widget(xml, widget_name);
++  widget = GTK_WIDGET(gtk_builder_get_object(builder, widget_name));
+   if (! widget)
+-    mn_show_fatal_error_dialog(NULL, "Widget \"%s\" not found in interface \"%s\".", widget_name, xml->filename);
++    mn_show_fatal_error_dialog(NULL, "Widget \"%s\" not found in interface.", widget_name);
+ 
+   return widget;
+ }
+ 
+ static void
+-create_interface_connect_cb (const char *handler_name,
++create_interface_connect_cb (GtkBuilder *builder,
+ 			     GObject *object,
+ 			     const char *signal_name,
+-			     const char *signal_data,
++			     const char *handler_name,
+ 			     GObject *connect_object,
+-			     gboolean after,
++                             GConnectFlags flags,
+ 			     gpointer user_data)
+ {
+   static GModule *module = NULL;
+   ContainerCreateInterfaceConnectInfo *info = user_data;
+   char *cb_name;
+   GCallback cb;
+-  GConnectFlags flags;
++  GConnectFlags cflags;
+ 
+   if (! module)
+     {
+@@ -359,11 +364,9 @@
+     mn_show_fatal_error_dialog(NULL, "Signal handler \"%s\" not found.", cb_name);
+   g_free(cb_name);
+ 
+-  flags = G_CONNECT_SWAPPED;
+-  if (after)
+-    flags |= G_CONNECT_AFTER;
++  cflags = G_CONNECT_SWAPPED;
+ 
+-  g_signal_connect_data(object, signal_name, cb, info->container, NULL, flags);
++  g_signal_connect_data(object, signal_name, cb, info->container, NULL, cflags);
+ }
+ 
+ void
+@@ -373,7 +376,7 @@
+ 			       const char *callback_prefix,
+ 			       ...)
+ {
+-  GladeXML *xml;
++  GtkBuilder *xml;
+   GtkWidget *child;
+   ContainerCreateInterfaceConnectInfo info;
+   va_list args;
+@@ -387,14 +390,16 @@
+   xml = mn_glade_xml_new(filename, child_name, NULL);
+   child = mn_glade_xml_get_widget(xml, child_name);
+ 
+-  if (GTK_IS_DIALOG(container))
+-    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(container)->vbox), child, TRUE, TRUE, 0);
+-  else
++  if (GTK_IS_DIALOG(container)) {
++    gtk_widget_unparent(child);
++    gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(container))), child, TRUE, TRUE, 0);
++  } else {
+     gtk_container_add(container, child);
++  }
+ 
+   info.container = container;
+   info.callback_prefix = callback_prefix;
+-  glade_xml_signal_autoconnect_full(xml, create_interface_connect_cb, &info);
++  gtk_builder_connect_signals_full(xml, create_interface_connect_cb, &info);
+ 
+   va_start(args, callback_prefix);
+ 
+@@ -422,7 +427,7 @@
+ 
+   toplevel = gtk_widget_get_toplevel(widget);
+ 
+-  return GTK_WIDGET_TOPLEVEL(toplevel) ? GTK_WINDOW(toplevel) : NULL;
++  return gtk_widget_get_toplevel(toplevel) ? GTK_WINDOW(toplevel) : NULL;
+ }
+ 
+ static void
+@@ -493,9 +498,11 @@
+ 			       gpointer user_data)
+ {
+   GtkAdjustment *adjustment;
++  GtkAllocation allocation;
+ 
++  gtk_widget_get_allocation(widget, &allocation);
+   adjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(widget));
+-  gtk_adjustment_set_value(adjustment, (double) y / (widget->allocation.height - 2) * (adjustment->upper - adjustment->page_size));
++  gtk_adjustment_set_value(adjustment, (double) y / (allocation.height - 2) * (gtk_adjustment_get_upper(adjustment) - gtk_adjustment_get_page_size(adjustment)));
+ 
+   return TRUE;			/* we're forcibly in a drop zone */
+ }
+@@ -562,7 +569,7 @@
+ 	MNMailbox *mailbox;
+ 
+ 	/* text/x-moz-url is encoded in UCS-2 but in format 8: broken */
+-	if (selection_data->format != 8 || selection_data->length <= 0 || (selection_data->length % 2) != 0)
++	if (gtk_selection_data_get_format(selection_data) != 8 || gtk_selection_data_get_length(selection_data) <= 0 || (gtk_selection_data_get_length(selection_data) % 2) != 0)
+ 	  {
+ 	    mn_show_error_dialog(mn_widget_get_parent_window(widget),
+ 				 _("A drag and drop error has occurred"),
+@@ -570,8 +577,8 @@
+ 	    return;
+ 	  }
+ 
+-	char_data = (const guint16 *) selection_data->data;
+-	char_len = selection_data->length / 2;
++	char_data = (const guint16 *) gtk_selection_data_get_data(selection_data);
++	char_len = gtk_selection_data_get_length(selection_data) / 2;
+ 
+ 	url = g_string_new(NULL);
+ 	for (i = 0; i < char_len && char_data[i] != '\n'; i++)
+@@ -1322,7 +1329,7 @@
+ }
+ 
+ static void
+-dialog_run_nonmodal_destroy_h (GtkObject *object, gpointer user_data)
++dialog_run_nonmodal_destroy_h (GtkWidget *object, gpointer user_data)
+ {
+   RunNonmodalInfo *info = user_data;
+ 
+@@ -1375,7 +1382,7 @@
+ 
+   g_object_ref(dialog);
+ 
+-  if (! GTK_WIDGET_VISIBLE(dialog))
++  if (! gtk_widget_get_visible(dialog))
+     gtk_widget_show(GTK_WIDGET(dialog));
+ 
+   g_object_connect(dialog,
+--- src/mn-main.c.gtk3	2008-05-22 17:45:35.000000000 +0200
++++ src/mn-main.c	2011-02-08 23:32:33.800030659 +0100
+@@ -21,7 +21,7 @@
+ #include <stdlib.h>
+ #include <signal.h>
+ #include <glib/gi18n.h>
+-#include <gnome.h>
++#include <libgnome/libgnome.h>
+ #include <libgnomevfs/gnome-vfs.h>
+ #include <libnotify/notify.h>
+ #include <dbus/dbus-glib-lowlevel.h>
+@@ -452,7 +452,7 @@
+ 
+   gnome_program_init(PACKAGE,
+ 		     VERSION,
+-		     LIBGNOMEUI_MODULE,
++		     LIBGNOME_MODULE,
+ 		     argc,
+ 		     argv,
+ 		     GNOME_PARAM_HUMAN_READABLE_NAME, _("Mail Notification"),
+@@ -460,6 +460,8 @@
+ 		     GNOME_PARAM_GOPTION_CONTEXT, option_context,
+ 		     NULL);
+ 
++  gtk_init(&argc, &argv);
++
+   if (arg_version)
+     {
+       print_version();
+@@ -497,7 +499,9 @@
+ 	  if (! gnome_vfs_init())
+ 	    mn_show_fatal_error_dialog(NULL, _("Unable to initialize the GnomeVFS library."));
+ 
++#if 0
+ 	  gnome_authentication_manager_init();
++#endif
+ 
+ 	  /* must be called before init_gmime() */
+ 	  mn_conf_init();
+--- src/mn-conf.c.gtk3	2008-05-22 17:45:35.000000000 +0200
++++ src/mn-conf.c	2011-02-07 20:07:01.630580132 +0100
+@@ -23,7 +23,7 @@
+ #include <errno.h>
+ #include <stdarg.h>
+ #include <glib/gi18n.h>
+-#include <gnome.h>
++#include <libgnome/libgnome.h>
+ #include "mn-util.h"
+ #include "mn-conf.h"
+ #include "mn-shell.h"
diff --git a/mail-notification.spec b/mail-notification.spec
index cc73bdc..f2c2426 100644
--- a/mail-notification.spec
+++ b/mail-notification.spec
@@ -17,6 +17,7 @@ Patch6:		mail-notification-5.4-weak.patch
 Patch7:		mail-notification-5.4-popup-attach.patch
 Patch8:		mail-notification-5.4-kde-trayicon.patch
 Patch9:		mail-notification-5.4-evolution-3-0-support.patch
+Patch10:	mail-notification-5.4-gtk3-support.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildRequires:  gettext
@@ -24,9 +25,9 @@ BuildRequires:  desktop-file-utils, scrollkeeper
 BuildRequires:  openssl-devel >= 0.9.6
 BuildRequires:  cyrus-sasl-devel >= 2.0
 BuildRequires:  glib2-devel >= 2.14
-BuildRequires:  gtk2-devel >= 2.12
-BuildRequires:  GConf2-devel, libgnomeui-devel
-BuildRequires:  libglade2-devel, dbus-glib-devel
+BuildRequires:  gtk3-devel
+BuildRequires:  GConf2-devel, libgnome-devel
+BuildRequires:  dbus-glib-devel
 BuildRequires:  libnotify-devel >= 0.4.1
 BuildRequires:  gmime-devel >= 2.4
 BuildRequires:  gnome-keyring-devel
@@ -36,6 +37,9 @@ BuildRequires:  perl-XML-Parser
 BuildRequires:  evolution-devel 
 BuildRequires:  evolution-data-server-devel >= 1.5
 
+# needed for the gtk-builder-convert tool
+BuildRequires:  gtk2-devel
+
 # temporary to work-around some dependency issues in other packages...
 BuildRequires:  libICE-devel, libSM-devel
 
@@ -77,8 +81,10 @@ Evolution support for Mail Notification.
 %patch8 -p1 -b .kde_trayicon
 
 # Evolution 3.0 requires a patch as the pkgconfig names have changed
+# GTK3 requires various changes as well
 %if 0%{?fedora} >= 15
 %patch9 -p0 -b .evolution30
+%patch10 -p0 -b .gtk3
 %endif
 
 #  Drop #line statements in C sources generated bu .gob,
@@ -90,6 +96,14 @@ do
 done
 popd
 
+# Convert the Glade UI to GtkBuilder
+%if 0%{?fedora} >= 15
+pushd ui
+gtk-builder-convert mailbox-properties-dialog.glade mailbox-properties-dialog.ui
+gtk-builder-convert properties-dialog.glade properties-dialog.ui
+popd
+%endif
+
 
 %build
 
@@ -141,6 +155,15 @@ desktop-file-install --vendor fedora                   \
   --add-category X-GNOME-NetworkSettings               \
   ${RPM_BUILD_ROOT}%{_datadir}/applications/mail-notification-properties.desktop
 
+# Replace the Glade files with their GtkBuilder counterparts
+%if 0%{?fedora} >= 15
+pushd ui
+rm -f $RPM_BUILD_ROOT%{_datadir}/%{name}/*.glade
+install -m0644 mailbox-properties-dialog.ui $RPM_BUILD_ROOT%{_datadir}/%{name}/mailbox-properties-dialog.ui
+install -m0644 properties-dialog.ui $RPM_BUILD_ROOT%{_datadir}/%{name}/properties-dialog.ui
+popd
+%endif
+
 %find_lang %{name}
 
 
@@ -211,6 +234,9 @@ export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
 %changelog
 * Wed Feb  2 2011 Erik van Pienbroek <epienbro at fedoraproject.org> - 5.4-30
 - Added support for evolution 3.0
+- Ported the package to use GTK3 (as evolution requires GTK3)
+- Replaced the libglade pieces by GtkBuilder
+- Dropped the dependency on libgnomeui (but keep the libgnome dep for now)
 
 * Tue Jan 11 2011 Dmitry Butskoy <Dmitry at Butskoy.name> - 5.4-29
 - rebuild for new evolution-data-server-2.91.5


More information about the scm-commits mailing list