second cumulative gtk2 patch
authorThorsten Maerz <torte@netztorte.de>
Sun, 5 Oct 2003 10:25:17 +0000 (10:25 +0000)
committerThorsten Maerz <torte@netztorte.de>
Sun, 5 Oct 2003 10:25:17 +0000 (10:25 +0000)
13 files changed:
ChangeLog-gtk2
ChangeLog-gtk2.jp
po/poconv.sh [new file with mode: 0644]
src/gtk/sylpheed-marshal.c [new file with mode: 0644]
src/gtk/sylpheed-marshal.h [new file with mode: 0644]
src/mimeview.c
src/plugins/trayicon/libeggtrayicon/Makefile.am
src/plugins/trayicon/libeggtrayicon/eggtrayicon.c
src/plugins/trayicon/libeggtrayicon/eggtrayicon.h
src/plugins/trayicon/trayicon.c
src/ssl_manager.c
src/summaryview.c
src/toolbar.c

index d01a864..10c11dc 100644 (file)
@@ -1,3 +1,18 @@
+2003-09-17 Takuro Ashie <ashie@homa.ne.jp>
+
+       * Convert character set and escape "text" attributes in toolbar setting
+       files.
+        * Fixed bug in button-press-event handling.
+
+2003-09-16 Thorsten Maerz <torte@netztorte.de>
+
+        * Fixed bug in key-press-event handling.
+
+2003-09-16 Takuro Ashie <ashie@homa.ne.jp>
+
+        * Enabled to compile tray-icon plugin (Ad-hoc).
+        * Avoid hang up bug of icon list in mime view (Ad-hoc).
+
 2003-09-14 Takuro Ashie <ashie@homa.ne.jp>
 
         * Enabled to compile on sylpheed-claws.
index 5e33ff6..bebb242 100644 (file)
@@ -1,3 +1,18 @@
+2003-09-17 Takuro Ashie <ashie@homa.ne.jp>
+
+       * ¥Ä¡¼¥ë¥Ð¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î"text"°À­¤Îʸ»ú¥³¡¼¥É¤òÊÑ´¹/¥¨¥¹¥±¡¼¥×¤¹¤ë
+       ¤è¤¦¤Ë¤·¤¿
+        * button-press-event¥Ï¥ó¥É¥ê¥ó¥°¤Î¥Ð¥°¤ò½¤Àµ
+
+2003-09-16 Thorsten Maerz <torte@netztorte.de>
+
+       * key-press-event¥Ï¥ó¥É¥ê¥ó¥°¤Î¥Ð¥°¤ò½¤Àµ.
+
+2003-09-16 Takuro Ashie <ashie@homa.ne.jp>
+
+       * tray-icon¥×¥é¥°¥¤¥ó¤ò¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿ (Ad-hoc)
+       * MIME¥Ó¥å¡¼¤Î¥¢¥¤¥³¥ó¥ê¥¹¥È¤Î¥Ï¥ó¥°¥¢¥Ã¥×¥Ð¥°¤ò½¤Àµ(Ad-hoc)
+
 2003-09-14 Takuro Ashie <ashie@homa.ne.jp>
 
         * sylpheed-claws¤Ç¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿
diff --git a/po/poconv.sh b/po/poconv.sh
new file mode 100644 (file)
index 0000000..9362781
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+for pofile in *.po; do
+    pocharset=`grep "Content-Type: text/plain; charset" $pofile | sed -e 's/\"Content-Type: text\/plain; charset=\\(.*\\)\\\n\"/\\1/'`
+    echo "$pofile:"
+    if test -z $pocharset; then
+        echo "missing charset!"
+    elif test "$pocharset" = "UTF-8"; then
+        echo "charset is already UTF-8. skipping..."
+    else
+        echo -n "converting $pocharset to UTF-8..."
+        iconv -f $pocharset -t UTF-8 $pofile > $pofile.utf8
+        echo "done!"
+        echo -n "Replace charset description to UTF-8..."
+        cp $pofile $pofile.bak
+        sed -e 's/Content-Type: text\/plain; charset=.*\\n/Content-Type: text\/plain; charset=UTF-8\\n/' < $pofile.utf8 > $pofile
+        echo "done!"
+        rm $pofile.utf8
+    fi
+    echo
+done
diff --git a/src/gtk/sylpheed-marshal.c b/src/gtk/sylpheed-marshal.c
new file mode 100644 (file)
index 0000000..cbada2b
--- /dev/null
@@ -0,0 +1,88 @@
+
+#include       <glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v)     g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v)      g_value_get_int (v)
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+#define g_marshal_value_peek_long(v)     g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
+#define g_marshal_value_peek_float(v)    g_value_get_float (v)
+#define g_marshal_value_peek_double(v)   g_value_get_double (v)
+#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v)    g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v)   g_value_get_object (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ *          Do not access GValues directly in your code. Instead, use the
+ *          g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
+#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_flags(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
+#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
+#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* NONE:POINTER (sylpheed-marshal.list:1) */
+
+/* NONE:INT,POINTER (sylpheed-marshal.list:2) */
+void
+sylpheed_marshal_VOID__INT_POINTER (GClosure     *closure,
+                                    GValue       *return_value,
+                                    guint         n_param_values,
+                                    const GValue *param_values,
+                                    gpointer      invocation_hint,
+                                    gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__INT_POINTER) (gpointer     data1,
+                                                  gint         arg_1,
+                                                  gpointer     arg_2,
+                                                  gpointer     data2);
+  register GMarshalFunc_VOID__INT_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__INT_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_int (param_values + 1),
+            g_marshal_value_peek_pointer (param_values + 2),
+            data2);
+}
+
diff --git a/src/gtk/sylpheed-marshal.h b/src/gtk/sylpheed-marshal.h
new file mode 100644 (file)
index 0000000..b1f56ff
--- /dev/null
@@ -0,0 +1,25 @@
+
+#ifndef __sylpheed_marshal_MARSHAL_H__
+#define __sylpheed_marshal_MARSHAL_H__
+
+#include       <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* NONE:POINTER (sylpheed-marshal.list:1) */
+#define sylpheed_marshal_VOID__POINTER g_cclosure_marshal_VOID__POINTER
+#define sylpheed_marshal_NONE__POINTER sylpheed_marshal_VOID__POINTER
+
+/* NONE:INT,POINTER (sylpheed-marshal.list:2) */
+extern void sylpheed_marshal_VOID__INT_POINTER (GClosure     *closure,
+                                                GValue       *return_value,
+                                                guint         n_param_values,
+                                                const GValue *param_values,
+                                                gpointer      invocation_hint,
+                                                gpointer      marshal_data);
+#define sylpheed_marshal_NONE__INT_POINTER     sylpheed_marshal_VOID__INT_POINTER
+
+G_END_DECLS
+
+#endif /* __sylpheed_marshal_MARSHAL_H__ */
+
index dc3b013..4b47d83 100644 (file)
@@ -138,7 +138,7 @@ static gboolean icon_list_select_by_number(MimeView *mimeview,
                                           gint          number);
 static void mime_toggle_button_cb      (GtkWidget      *button,
                                         MimeView       *mimeview);
-static void part_button_pressed                (MimeView       *mimeview, 
+static gboolean part_button_pressed    (MimeView       *mimeview, 
                                         GdkEventButton *event, 
                                         MimeInfo       *partinfo);
 static void icon_scroll_size_allocate_cb(GtkWidget     *widget, 
@@ -804,13 +804,14 @@ static gint mimeview_button_pressed(GtkWidget *widget, GdkEventButton *event,
        return TRUE;
 }
 
-static void part_button_pressed(MimeView *mimeview, GdkEventButton *event, 
-                               MimeInfo *partinfo)
+static gboolean part_button_pressed(MimeView *mimeview, GdkEventButton *event, 
+                                   MimeInfo *partinfo)
 {
        if (event->button == 2 ||
            (event->button == 1 && event->type == GDK_2BUTTON_PRESS)) {
                /* call external program for image, audio or html */
                mimeview_launch(mimeview);
+               return TRUE;
        } else if (event->button == 3) {
                if (partinfo && (partinfo->mime_type == MIME_TEXT ||
                                 partinfo->mime_type == MIME_TEXT_HTML ||
@@ -842,8 +843,10 @@ static void part_button_pressed(MimeView *mimeview, GdkEventButton *event,
                gtk_menu_popup(GTK_MENU(mimeview->popupmenu),
                               NULL, NULL, NULL, NULL,
                               event->button, event->time);
+               return TRUE;
        }
 
+       return FALSE;
 }
 
 
@@ -1345,7 +1348,7 @@ static gboolean icon_clicked_cb (GtkWidget *button, GdkEventButton *event, MimeV
 
        part_button_pressed(mimeview, event, partinfo);
 
-       return TRUE;
+       return FALSE;
 }
 
 static void icon_selected (MimeView *mimeview, gint num, MimeInfo *partinfo)
@@ -1644,7 +1647,7 @@ static gboolean icon_list_select_by_number(MimeView       *mimeview,
 }
 
 static void icon_scroll_size_allocate_cb(GtkWidget *widget, 
-                                       GtkAllocation *size, MimeView *mimeview)
+                                        GtkAllocation *size, MimeView *mimeview)
 {
        GtkAllocation *mainbox_size;
        GtkAllocation *vbox_size;
@@ -1657,9 +1660,12 @@ static void icon_scroll_size_allocate_cb(GtkWidget *widget,
        vbox_size = &mimeview->icon_vbox->allocation;
        layout_size = &mimeview->icon_scroll->allocation;
        
+#warning FIXME_GTK2 /* this code cause hang up. */
+#if 0
        /* centralise the vbox */
        gtk_layout_move(GTK_LAYOUT(mimeview->icon_scroll), mimeview->icon_vbox, 
                        (mainbox_size->width - vbox_size->width)/2, 0);
+#endif
        
        gtk_layout_set_size(GTK_LAYOUT(mimeview->icon_scroll), 
                            GTK_LAYOUT(mimeview->icon_scroll)->width, 
index 47294b4..7866556 100644 (file)
@@ -1,10 +1,7 @@
 noinst_LTLIBRARIES = libeggtrayicon.la
 
 libeggtrayicon_la_SOURCES = \
-       eggtrayicon.c eggtrayicon.h \
-       gtk2-funcs.c gtk2-funcs.h \
-       gtkplugxembed.c gtkplugxembed.h \
-       xembed.h
+       eggtrayicon.c eggtrayicon.h
 
 AM_CPPFLAGS = \
        $(GTK_CFLAGS)
index 4217fd8..6c30930 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
+#include <config.h>
 #include <string.h>
-#include <gdk/gdkx.h>
+#include <libintl.h>
+
 #include "eggtrayicon.h"
 
+#include <gdk/gdkx.h>
+#include <X11/Xatom.h>
+
+#ifndef EGG_COMPILATION
+#ifndef _
+#define _(x) dgettext (GETTEXT_PACKAGE, x)
+#define N_(x) x
+#endif
+#else
+#define _(x) x
+#define N_(x) x
+#endif
+
 #define SYSTEM_TRAY_REQUEST_DOCK    0
 #define SYSTEM_TRAY_BEGIN_MESSAGE   1
 #define SYSTEM_TRAY_CANCEL_MESSAGE  2
+
+#define SYSTEM_TRAY_ORIENTATION_HORZ 0
+#define SYSTEM_TRAY_ORIENTATION_VERT 1
+
+enum {
+  PROP_0,
+  PROP_ORIENTATION
+};
          
-static GtkPlugXEmbedClass *parent_class = NULL;
+static GtkPlugClass *parent_class = NULL;
 
 static void egg_tray_icon_init (EggTrayIcon *icon);
 static void egg_tray_icon_class_init (EggTrayIconClass *klass);
 
+static void egg_tray_icon_get_property (GObject    *object,
+                                       guint       prop_id,
+                                       GValue     *value,
+                                       GParamSpec *pspec);
+
+static void egg_tray_icon_realize   (GtkWidget *widget);
+static void egg_tray_icon_unrealize (GtkWidget *widget);
+
 static void egg_tray_icon_update_manager_window (EggTrayIcon *icon);
 
-GtkType
+GType
 egg_tray_icon_get_type (void)
 {
-  static GtkType our_type = 0;
+  static GType our_type = 0;
 
   if (our_type == 0)
     {
-      static const GtkTypeInfo our_info =
+      static const GTypeInfo our_info =
       {
-       "EggTrayIcon",
-       sizeof (EggTrayIcon),
        sizeof (EggTrayIconClass),
-       (GtkClassInitFunc) egg_tray_icon_class_init,
-       (GtkObjectInitFunc) egg_tray_icon_init,
-       NULL, NULL, NULL
+       (GBaseInitFunc) NULL,
+       (GBaseFinalizeFunc) NULL,
+       (GClassInitFunc) egg_tray_icon_class_init,
+       NULL, /* class_finalize */
+       NULL, /* class_data */
+       sizeof (EggTrayIcon),
+       0,    /* n_preallocs */
+       (GInstanceInitFunc) egg_tray_icon_init
       };
 
-      our_type = gtk_type_unique (GTK_TYPE_PLUG_XEMBED, &our_info);
+      our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0);
     }
 
   return our_type;
@@ -60,6 +94,7 @@ static void
 egg_tray_icon_init (EggTrayIcon *icon)
 {
   icon->stamp = 1;
+  icon->orientation = GTK_ORIENTATION_HORIZONTAL;
   
   gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK);
 }
@@ -67,8 +102,95 @@ egg_tray_icon_init (EggTrayIcon *icon)
 static void
 egg_tray_icon_class_init (EggTrayIconClass *klass)
 {
-       //parent_class = g_type_class_peek_parent (klass);
-       parent_class = gtk_type_class(gtk_plug_xembed_get_type());
+  GObjectClass *gobject_class = (GObjectClass *)klass;
+  GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->get_property = egg_tray_icon_get_property;
+
+  widget_class->realize   = egg_tray_icon_realize;
+  widget_class->unrealize = egg_tray_icon_unrealize;
+
+  g_object_class_install_property (gobject_class,
+                                  PROP_ORIENTATION,
+                                  g_param_spec_enum ("orientation",
+                                                     _("Orientation"),
+                                                     _("The orientation of the tray."),
+                                                     GTK_TYPE_ORIENTATION,
+                                                     GTK_ORIENTATION_HORIZONTAL,
+                                                     G_PARAM_READABLE));
+}
+
+static void
+egg_tray_icon_get_property (GObject    *object,
+                           guint       prop_id,
+                           GValue     *value,
+                           GParamSpec *pspec)
+{
+  EggTrayIcon *icon = EGG_TRAY_ICON (object);
+
+  switch (prop_id)
+    {
+    case PROP_ORIENTATION:
+      g_value_set_enum (value, icon->orientation);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+egg_tray_icon_get_orientation_property (EggTrayIcon *icon)
+{
+  Display *xdisplay;
+  Atom type;
+  int format;
+  union {
+       gulong *prop;
+       guchar *prop_ch;
+  } prop = { NULL };
+  gulong nitems;
+  gulong bytes_after;
+  int error, result;
+
+  g_assert (icon->manager_window != None);
+  
+  xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
+
+  gdk_error_trap_push ();
+  type = None;
+  result = XGetWindowProperty (xdisplay,
+                              icon->manager_window,
+                              icon->orientation_atom,
+                              0, G_MAXLONG, FALSE,
+                              XA_CARDINAL,
+                              &type, &format, &nitems,
+                              &bytes_after, &(prop.prop_ch));
+  error = gdk_error_trap_pop ();
+
+  if (error || result != Success)
+    return;
+
+  if (type == XA_CARDINAL)
+    {
+      GtkOrientation orientation;
+
+      orientation = (prop.prop [0] == SYSTEM_TRAY_ORIENTATION_HORZ) ?
+                                       GTK_ORIENTATION_HORIZONTAL :
+                                       GTK_ORIENTATION_VERTICAL;
+
+      if (icon->orientation != orientation)
+       {
+         icon->orientation = orientation;
+
+         g_object_notify (G_OBJECT (icon), "orientation");
+       }
+    }
+
+  if (prop.prop)
+    XFree (prop.prop);
 }
 
 static GdkFilterReturn
@@ -85,6 +207,11 @@ egg_tray_icon_manager_filter (GdkXEvent *xevent, GdkEvent *event, gpointer user_
     }
   else if (xev->xany.window == icon->manager_window)
     {
+      if (xev->xany.type == PropertyNotify &&
+         xev->xproperty.atom == icon->orientation_atom)
+       {
+         egg_tray_icon_get_orientation_property (icon);
+       }
       if (xev->xany.type == DestroyNotify)
        {
          egg_tray_icon_update_manager_window (icon);
@@ -94,6 +221,30 @@ egg_tray_icon_manager_filter (GdkXEvent *xevent, GdkEvent *event, gpointer user_
   return GDK_FILTER_CONTINUE;
 }
 
+static void
+egg_tray_icon_unrealize (GtkWidget *widget)
+{
+  EggTrayIcon *icon = EGG_TRAY_ICON (widget);
+  GdkWindow *root_window;
+
+  if (icon->manager_window != None)
+    {
+      GdkWindow *gdkwin;
+
+      gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget),
+                                              icon->manager_window);
+
+      gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
+    }
+
+  root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget));
+
+  gdk_window_remove_filter (root_window, egg_tray_icon_manager_filter, icon);
+
+  if (GTK_WIDGET_CLASS (parent_class)->unrealize)
+    (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
+}
+
 static void
 egg_tray_icon_send_manager_message (EggTrayIcon *icon,
                                    long         message,
@@ -105,26 +256,17 @@ egg_tray_icon_send_manager_message (EggTrayIcon *icon,
   XClientMessageEvent ev;
   Display *display;
   
-#ifdef DEBUG
-  g_print("Sending message %lx to %ld. data=(%ld, %ld, %ld)\n", message, window,
-         data1, data2, data3);
-#endif
-
   ev.type = ClientMessage;
   ev.window = window;
   ev.message_type = icon->system_tray_opcode_atom;
   ev.format = 32;
-  ev.data.l[0] = GDK_CURRENT_TIME; //gdk_x11_get_server_time (GTK_WIDGET (icon)->window);
+  ev.data.l[0] = gdk_x11_get_server_time (GTK_WIDGET (icon)->window);
   ev.data.l[1] = message;
   ev.data.l[2] = data1;
   ev.data.l[3] = data2;
   ev.data.l[4] = data3;
 
-#if HAVE_GTK_MULTIHEAD
   display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
-#else
-  display = gdk_display;
-#endif
   
   gdk_error_trap_push ();
   XSendEvent (display,
@@ -139,7 +281,7 @@ egg_tray_icon_send_dock_request (EggTrayIcon *icon)
   egg_tray_icon_send_manager_message (icon,
                                      SYSTEM_TRAY_REQUEST_DOCK,
                                      icon->manager_window,
-                                     gtk_plug_xembed_get_id (GTK_PLUG_XEMBED (icon)),
+                                     gtk_plug_get_id (GTK_PLUG (icon)),
                                      0, 0);
 }
 
@@ -148,22 +290,14 @@ egg_tray_icon_update_manager_window (EggTrayIcon *icon)
 {
   Display *xdisplay;
   
-#if HAVE_GTK_MULTIHEAD
   xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
-#else
-  xdisplay = gdk_display;
-#endif
   
   if (icon->manager_window != None)
     {
       GdkWindow *gdkwin;
 
-#if HAVE_GTK_MULTIHEAD
-      gdkwin = gdk_window_lookup_for_display (display,
+      gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
                                              icon->manager_window);
-#else
-      gdkwin = gdk_window_lookup (icon->manager_window);
-#endif
       
       gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
     }
@@ -175,7 +309,7 @@ egg_tray_icon_update_manager_window (EggTrayIcon *icon)
 
   if (icon->manager_window != None)
     XSelectInput (xdisplay,
-                 icon->manager_window, StructureNotifyMask);
+                 icon->manager_window, StructureNotifyMask|PropertyChangeMask);
 
   XUngrabServer (xdisplay);
   XFlush (xdisplay);
@@ -184,87 +318,85 @@ egg_tray_icon_update_manager_window (EggTrayIcon *icon)
     {
       GdkWindow *gdkwin;
 
-#if HAVE_GTK_MULTIHEAD
       gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
                                              icon->manager_window);
-#else
-      gdkwin = gdk_window_lookup (icon->manager_window);
-#endif
       
       gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);
 
       /* Send a request that we'd like to dock */
       egg_tray_icon_send_dock_request (icon);
+
+      egg_tray_icon_get_orientation_property (icon);
     }
 }
 
-EggTrayIcon *
-egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name)
+static void
+egg_tray_icon_realize (GtkWidget *widget)
 {
-  EggTrayIcon *icon;
+  EggTrayIcon *icon = EGG_TRAY_ICON (widget);
+  GdkScreen *screen;
+  GdkDisplay *display;
+  Display *xdisplay;
   char buffer[256];
   GdkWindow *root_window;
 
-  g_return_val_if_fail (xscreen != NULL, NULL);
-  
-  icon = (EggTrayIcon*)gtk_object_new (EGG_TYPE_TRAY_ICON, NULL);
-  gtk_window_set_title (GTK_WINDOW (icon), name);
+  if (GTK_WIDGET_CLASS (parent_class)->realize)
+    GTK_WIDGET_CLASS (parent_class)->realize (widget);
 
-#if HAVE_GTK_MULTIHEAD
-  gtk_plug_construct_for_display (GTK_PLUG_XEMBED (icon),
-                                 gdk_screen_get_display (screen), 0);
-#else
-  gtk_plug_xembed_construct (GTK_PLUG_XEMBED (icon), 0);
-#endif
-  
-  gtk_widget_realize (GTK_WIDGET (icon));
+  screen = gtk_widget_get_screen (widget);
+  display = gdk_screen_get_display (screen);
+  xdisplay = gdk_x11_display_get_xdisplay (display);
 
   /* Now see if there's a manager window around */
   g_snprintf (buffer, sizeof (buffer),
              "_NET_SYSTEM_TRAY_S%d",
-             XScreenNumberOfScreen (xscreen));
-  
-  icon->selection_atom = XInternAtom (DisplayOfScreen (xscreen),
-                                     buffer, False);
+             gdk_screen_get_number (screen));
+
+  icon->selection_atom = XInternAtom (xdisplay, buffer, False);
   
-  icon->manager_atom = XInternAtom (DisplayOfScreen (xscreen),
-                                   "MANAGER", False);
+  icon->manager_atom = XInternAtom (xdisplay, "MANAGER", False);
   
-  icon->system_tray_opcode_atom = XInternAtom (DisplayOfScreen (xscreen),
-                                              "_NET_SYSTEM_TRAY_OPCODE", False);
+  icon->system_tray_opcode_atom = XInternAtom (xdisplay,
+                                                  "_NET_SYSTEM_TRAY_OPCODE",
+                                                  False);
+
+  icon->orientation_atom = XInternAtom (xdisplay,
+                                       "_NET_SYSTEM_TRAY_ORIENTATION",
+                                       False);
 
   egg_tray_icon_update_manager_window (icon);
 
-#if HAVE_GTK_MULTIHEAD
   root_window = gdk_screen_get_root_window (screen);
-#else
-  root_window = GDK_ROOT_PARENT(); //gdk_window_lookup (gdk_x11_get_default_root_xwindow ());
-#endif
   
   /* Add a root window filter so that we get changes on MANAGER */
   gdk_window_add_filter (root_window,
                         egg_tray_icon_manager_filter, icon);
-                     
-  return icon;
 }
 
-#if HAVE_GTK_MULTIHEAD
 EggTrayIcon *
-egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name)
+egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name)
 {
-  EggTrayIcon *icon;
-  char buffer[256];
+  GdkDisplay *display;
+  GdkScreen *screen;
+
+  display = gdk_x11_lookup_xdisplay (DisplayOfScreen (xscreen));
+  screen = gdk_display_get_screen (display, XScreenNumberOfScreen (xscreen));
 
+  return egg_tray_icon_new_for_screen (screen, name);
+}
+
+EggTrayIcon *
+egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name)
+{
   g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
 
-  return egg_tray_icon_new_for_xscreen (GDK_SCREEN_XSCREEN (screen), name);
+  return g_object_new (EGG_TYPE_TRAY_ICON, "screen", screen, "title", name, NULL);
 }
-#endif
 
 EggTrayIcon*
 egg_tray_icon_new (const gchar *name)
 {
-  return egg_tray_icon_new_for_xscreen (DefaultScreenOfDisplay (gdk_display), name);
+  return g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL);
 }
 
 guint
@@ -289,7 +421,7 @@ egg_tray_icon_send_message (EggTrayIcon *icon,
   
   /* Get ready to send the message */
   egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE,
-                                     (Window)gtk_plug_xembed_get_id (GTK_PLUG_XEMBED (icon)),
+                                     (Window)gtk_plug_get_id (GTK_PLUG (icon)),
                                      timeout, len, stamp);
 
   /* Now to send the actual message */
@@ -299,14 +431,10 @@ egg_tray_icon_send_message (EggTrayIcon *icon,
       XClientMessageEvent ev;
       Display *xdisplay;
 
-#if HAVE_GTK_MULTIHEAD
       xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
-#else
-      xdisplay = gdk_display;
-#endif
       
       ev.type = ClientMessage;
-      ev.window = (Window)gtk_plug_xembed_get_id (GTK_PLUG_XEMBED (icon));
+      ev.window = (Window)gtk_plug_get_id (GTK_PLUG (icon));
       ev.format = 8;
       ev.message_type = XInternAtom (xdisplay,
                                     "_NET_SYSTEM_TRAY_MESSAGE_DATA", False);
@@ -339,6 +467,14 @@ egg_tray_icon_cancel_message (EggTrayIcon *icon,
   g_return_if_fail (id > 0);
   
   egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE,
-                                     (Window)gtk_plug_xembed_get_id (GTK_PLUG_XEMBED (icon)),
+                                     (Window)gtk_plug_get_id (GTK_PLUG (icon)),
                                      id, 0, 0);
 }
+
+GtkOrientation
+egg_tray_icon_get_orientation (EggTrayIcon *icon)
+{
+  g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), GTK_ORIENTATION_HORIZONTAL);
+
+  return icon->orientation;
+}
index 7d0c6e2..007f4c1 100644 (file)
 #ifndef __EGG_TRAY_ICON_H__
 #define __EGG_TRAY_ICON_H__
 
-#include "gtkplugxembed.h"
+#include <gtk/gtkplug.h>
 #include <gdk/gdkx.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 #define EGG_TYPE_TRAY_ICON             (egg_tray_icon_get_type ())
-#define EGG_TRAY_ICON(obj)             (GTK_CHECK_CAST ((obj), EGG_TYPE_TRAY_ICON, EggTrayIcon))
-#define EGG_TRAY_ICON_CLASS(klass)     (GTK_CHECK_CLASS_CAST ((klass), EGG_TYPE_TRAY_ICON, EggTrayIconClass))
-#define EGG_IS_TRAY_ICON(obj)          (GTK_CHECK_TYPE ((obj), EGG_TYPE_TRAY_ICON))
-//#define EGG_IS_TRAY_ICON_CLASS(klass)        (GTK_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TRAY_ICON))
-//#define EGG_TRAY_ICON_GET_CLASS(obj) (GTK_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TRAY_ICON, EggTrayIconClass))
+#define EGG_TRAY_ICON(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TRAY_ICON, EggTrayIcon))
+#define EGG_TRAY_ICON_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TRAY_ICON, EggTrayIconClass))
+#define EGG_IS_TRAY_ICON(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TRAY_ICON))
+#define EGG_IS_TRAY_ICON_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TRAY_ICON))
+#define EGG_TRAY_ICON_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TRAY_ICON, EggTrayIconClass))
        
 typedef struct _EggTrayIcon      EggTrayIcon;
 typedef struct _EggTrayIconClass  EggTrayIconClass;
 
 struct _EggTrayIcon
 {
-  GtkPlugXEmbed parent_instance;
+  GtkPlug parent_instance;
 
   guint stamp;
   
   Atom selection_atom;
   Atom manager_atom;
   Atom system_tray_opcode_atom;
+  Atom orientation_atom;
   Window manager_window;
+
+  GtkOrientation orientation;
 };
 
 struct _EggTrayIconClass
 {
-  GtkPlugXEmbedClass parent_class;
+  GtkPlugClass parent_class;
 };
 
-GtkType      egg_tray_icon_get_type       (void);
+GType        egg_tray_icon_get_type       (void);
 
-EggTrayIcon *
-egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name);
-#if EGG_TRAY_ENABLE_MULTIHEAD
 EggTrayIcon *egg_tray_icon_new_for_screen (GdkScreen   *screen,
                                           const gchar *name);
-#endif
 
 EggTrayIcon *egg_tray_icon_new            (const gchar *name);
 
@@ -73,10 +70,8 @@ guint        egg_tray_icon_send_message   (EggTrayIcon *icon,
 void         egg_tray_icon_cancel_message (EggTrayIcon *icon,
                                           guint        id);
 
-
+GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon);
                                            
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* __EGG_TRAY_ICON_H__ */
index 7f1b18f..af09fe3 100644 (file)
@@ -138,7 +138,9 @@ static void destroy_cb(GtkWidget *widget, gpointer *data)
 
 static void create_trayicon()
 {
+#if 0
        GtkPacker *packer;
+#endif
 
         trayicon = egg_tray_icon_new("Sylpheed-Claws");
 //        trayicon = gtk_window_new(GTK_WINDOW_TOPLEVEL);
@@ -154,12 +156,18 @@ static void create_trayicon()
         gtk_container_set_border_width(GTK_CONTAINER(eventbox), 0);
         gtk_container_add(GTK_CONTAINER(trayicon), GTK_WIDGET(eventbox));
 
+#warning FIXME_GTK2
+#if 0
        packer = GTK_PACKER(gtk_packer_new());
         gtk_container_add(GTK_CONTAINER(eventbox), GTK_WIDGET(packer));
         gtk_container_set_border_width(GTK_CONTAINER(packer), 0);
 
         image = gtk_pixmap_new(nomail_pixmap, nomail_bitmap);
         gtk_packer_add_defaults(GTK_PACKER(packer), GTK_WIDGET(image), GTK_SIDE_TOP, GTK_ANCHOR_CENTER, GTK_PACK_EXPAND);
+#else
+        image = gtk_image_new_from_pixmap(nomail_pixmap, nomail_bitmap);
+        gtk_container_add(GTK_CONTAINER(eventbox), image);
+#endif
 
        destroy_signal_id =
        gtk_signal_connect(GTK_OBJECT(trayicon), "destroy",
index 889e569..09d6942 100644 (file)
@@ -77,7 +77,7 @@ void ssl_manager_create(void)
        GtkWidget *ok_btn;
        gchar *titles[2];
 
-       window = gtk_window_new (GTK_WINDOW_DIALOG);
+       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title (GTK_WINDOW(window),
                              _("Saved SSL Certificates"));
        gtk_container_set_border_width (GTK_CONTAINER (window), 8);
index 0af8518..eca14b5 100644 (file)
@@ -267,9 +267,9 @@ static gboolean summary_searchbar_pressed
                                        (GtkWidget              *ctree,
                                         GdkEventKey            *event,
                                         SummaryView            *summaryview);
-static void summary_searchbar_focus_evt        (GtkWidget              *ctree,
-                                        GdkEventFocus          *event,
-                                        SummaryView            *summaryview);
+static gboolean summary_searchbar_focus_evt    (GtkWidget              *ctree,
+                                                GdkEventFocus          *event,
+                                                SummaryView            *summaryview);
 static void summary_searchtype_changed (GtkMenuItem            *widget, 
                                         gpointer                data);
 static void summary_open_row           (GtkSCTree              *sctree,
@@ -4549,10 +4549,10 @@ static gboolean summary_searchbar_pressed(GtkWidget *widget, GdkEventKey *event,
 {
        if (event != NULL && event->keyval == GDK_Return)
                summary_show(summaryview, summaryview->folder_item);
-       return TRUE;            
+       return FALSE;
 }
 
-static void summary_searchbar_focus_evt(GtkWidget *widget, GdkEventFocus *event,
+static gboolean summary_searchbar_focus_evt(GtkWidget *widget, GdkEventFocus *event,
                                SummaryView *summaryview)
 {
        if (event != NULL && event->in)
@@ -4563,6 +4563,8 @@ static void summary_searchbar_focus_evt(GtkWidget *widget, GdkEventFocus *event,
                g_signal_handlers_unblock_by_func(G_OBJECT(summaryview->mainwin->window), 
                                                  G_CALLBACK(mainwindow_key_pressed),
                                                  summaryview->mainwin);
+
+       return FALSE;
 }
 
 static void summary_searchtype_changed(GtkMenuItem *widget, gpointer data)
index e02bc99..8c986c0 100644 (file)
@@ -526,15 +526,19 @@ void toolbar_save_config_file(ToolbarType source)
                for (cur = toolbar_config[source].item_list; cur != NULL; cur = cur->next) {
                        ToolbarItem *toolbar_item = (ToolbarItem*) cur->data;
                        
-                       if (toolbar_item->index != A_SEPARATOR) 
-                               fprintf(fp, "\t<%s %s=\"%s\" %s=\"%s\" %s=\"%s\"/>\n",
+#warning FIXME_GTK2
+                       if (toolbar_item->index != A_SEPARATOR) {
+                               fprintf(fp, "\t<%s %s=\"%s\" %s=\"",
                                        TOOLBAR_TAG_ITEM, 
                                        TOOLBAR_ICON_FILE, toolbar_item->file,
-                                       TOOLBAR_ICON_TEXT, toolbar_item->text,
+                                       TOOLBAR_ICON_TEXT);
+                               xml_file_put_escape_str(fp, toolbar_item->text);
+                               fprintf(fp, "\" %s=\"%s\"/>\n",
                                        TOOLBAR_ICON_ACTION, 
                                        toolbar_ret_text_from_val(toolbar_item->index));
-                       else 
+                       } else {
                                fprintf(fp, "\t<%s/>\n", TOOLBAR_TAG_SEPARATOR); 
+                       }
                }
 
                fprintf(fp, "</%s>\n", TOOLBAR_TAG_INDEX);      
@@ -870,20 +874,23 @@ static void toolbar_exec_cb(GtkWidget     *widget,
 
 
 /* popup callback functions */
-static void toolbar_reply_popup_cb(GtkWidget       *widget, 
-                                  GdkEventButton  *event, 
-                                  gpointer         data)
+static gboolean toolbar_reply_popup_cb(GtkWidget       *widget, 
+                                      GdkEventButton  *event, 
+                                      gpointer         data)
 {
        Toolbar *toolbar_data = (Toolbar*)data;
        
-       if (!event) return;
+       if (!event) return FALSE;
        
        if (event->button == 3) {
                gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL);
                gtk_menu_popup(GTK_MENU(toolbar_data->reply_popup), NULL, NULL,
                       menu_button_position, widget,
                       event->button, event->time);
+               return TRUE;
        }
+
+       return FALSE;
 }
 
 static void toolbar_reply_popup_closed_cb(GtkMenuShell *menu_shell, gpointer data)
@@ -915,18 +922,21 @@ static void toolbar_reply_popup_closed_cb(GtkMenuShell *menu_shell, gpointer dat
        manage_window_focus_in(window, NULL, NULL);
 }
 
-static void toolbar_reply_to_all_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
+static gboolean toolbar_reply_to_all_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
 {
        Toolbar *toolbar_data = (Toolbar*)data;
        
-       if (!event) return;
+       if (!event) return FALSE;
        
        if (event->button == 3) {
                gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL);
                gtk_menu_popup(GTK_MENU(toolbar_data->replyall_popup), NULL, NULL,
                       menu_button_position, widget,
                       event->button, event->time);
+               return TRUE;
        }
+
+       return FALSE;
 }
 
 static void toolbar_reply_to_all_popup_closed_cb(GtkMenuShell *menu_shell, gpointer data)
@@ -958,7 +968,7 @@ static void toolbar_reply_to_all_popup_closed_cb(GtkMenuShell *menu_shell, gpoin
        manage_window_focus_in(window, NULL, NULL);
 }
 
-static void toolbar_reply_to_list_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
+static gboolean toolbar_reply_to_list_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
 {
        Toolbar *toolbar_data = (Toolbar*)data;
 
@@ -967,7 +977,10 @@ static void toolbar_reply_to_list_popup_cb(GtkWidget *widget, GdkEventButton *ev
                gtk_menu_popup(GTK_MENU(toolbar_data->replylist_popup), NULL, NULL,
                       menu_button_position, widget,
                       event->button, event->time);
+               return TRUE;
        }
+
+       return FALSE;
 }
 
 static void toolbar_reply_to_list_popup_closed_cb(GtkMenuShell *menu_shell, gpointer data)
@@ -997,7 +1010,7 @@ static void toolbar_reply_to_list_popup_closed_cb(GtkMenuShell *menu_shell, gpoi
        manage_window_focus_in(window, NULL, NULL);
 }
 
-static void toolbar_reply_to_sender_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
+static gboolean toolbar_reply_to_sender_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
 {
        Toolbar *toolbar_data = (Toolbar*)data;
 
@@ -1006,7 +1019,10 @@ static void toolbar_reply_to_sender_popup_cb(GtkWidget *widget, GdkEventButton *
                gtk_menu_popup(GTK_MENU(toolbar_data->replysender_popup), NULL, NULL,
                       menu_button_position, widget,
                       event->button, event->time);
+               return TRUE;
        }
+
+       return FALSE;
 }
 
 static void toolbar_reply_to_sender_popup_closed_cb(GtkMenuShell *menu_shell, gpointer data)
@@ -1035,7 +1051,7 @@ static void toolbar_reply_to_sender_popup_closed_cb(GtkMenuShell *menu_shell, gp
        manage_window_focus_in(window, NULL, NULL);
 }
 
-static void toolbar_forward_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
+static gboolean toolbar_forward_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
 {
        Toolbar *toolbar_data = (Toolbar*)data;
 
@@ -1044,7 +1060,10 @@ static void toolbar_forward_popup_cb(GtkWidget *widget, GdkEventButton *event, g
                gtk_menu_popup(GTK_MENU(toolbar_data->fwd_popup), NULL, NULL,
                               menu_button_position, widget,
                               event->button, event->time);
+               return TRUE;
        }
+
+       return FALSE;
 }
 
 static void toolbar_forward_popup_closed_cb (GtkMenuShell *menu_shell,