From c39bf0d8dbc24828f963b057ee50f566b75f2753 Mon Sep 17 00:00:00 2001 From: Thorsten Maerz Date: Sun, 5 Oct 2003 10:25:17 +0000 Subject: [PATCH 1/1] second cumulative gtk2 patch --- ChangeLog-gtk2 | 15 + ChangeLog-gtk2.jp | 15 + po/poconv.sh | 20 ++ src/gtk/sylpheed-marshal.c | 88 ++++++ src/gtk/sylpheed-marshal.h | 25 ++ src/mimeview.c | 16 +- .../trayicon/libeggtrayicon/Makefile.am | 5 +- .../trayicon/libeggtrayicon/eggtrayicon.c | 298 +++++++++++++----- .../trayicon/libeggtrayicon/eggtrayicon.h | 35 +- src/plugins/trayicon/trayicon.c | 8 + src/ssl_manager.c | 2 +- src/summaryview.c | 12 +- src/toolbar.c | 45 ++- 13 files changed, 455 insertions(+), 129 deletions(-) create mode 100644 po/poconv.sh create mode 100644 src/gtk/sylpheed-marshal.c create mode 100644 src/gtk/sylpheed-marshal.h diff --git a/ChangeLog-gtk2 b/ChangeLog-gtk2 index d01a8644e..10c11dc87 100644 --- a/ChangeLog-gtk2 +++ b/ChangeLog-gtk2 @@ -1,3 +1,18 @@ +2003-09-17 Takuro Ashie + + * Convert character set and escape "text" attributes in toolbar setting + files. + * Fixed bug in button-press-event handling. + +2003-09-16 Thorsten Maerz + + * Fixed bug in key-press-event handling. + +2003-09-16 Takuro Ashie + + * 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 * Enabled to compile on sylpheed-claws. diff --git a/ChangeLog-gtk2.jp b/ChangeLog-gtk2.jp index 5e33ff699..bebb24219 100644 --- a/ChangeLog-gtk2.jp +++ b/ChangeLog-gtk2.jp @@ -1,3 +1,18 @@ +2003-09-17 Takuro Ashie + + * ¥Ä¡¼¥ë¥Ð¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î"text"°À­¤Îʸ»ú¥³¡¼¥É¤òÊÑ´¹/¥¨¥¹¥±¡¼¥×¤¹¤ë + ¤è¤¦¤Ë¤·¤¿ + * button-press-event¥Ï¥ó¥É¥ê¥ó¥°¤Î¥Ð¥°¤ò½¤Àµ + +2003-09-16 Thorsten Maerz + + * key-press-event¥Ï¥ó¥É¥ê¥ó¥°¤Î¥Ð¥°¤ò½¤Àµ. + +2003-09-16 Takuro Ashie + + * tray-icon¥×¥é¥°¥¤¥ó¤ò¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿ (Ad-hoc) + * MIME¥Ó¥å¡¼¤Î¥¢¥¤¥³¥ó¥ê¥¹¥È¤Î¥Ï¥ó¥°¥¢¥Ã¥×¥Ð¥°¤ò½¤Àµ(Ad-hoc) + 2003-09-14 Takuro Ashie * sylpheed-claws¤Ç¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿ diff --git a/po/poconv.sh b/po/poconv.sh new file mode 100644 index 000000000..93627819c --- /dev/null +++ b/po/poconv.sh @@ -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 index 000000000..cbada2bfd --- /dev/null +++ b/src/gtk/sylpheed-marshal.c @@ -0,0 +1,88 @@ + +#include + + +#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 index 000000000..b1f56ff7a --- /dev/null +++ b/src/gtk/sylpheed-marshal.h @@ -0,0 +1,25 @@ + +#ifndef __sylpheed_marshal_MARSHAL_H__ +#define __sylpheed_marshal_MARSHAL_H__ + +#include + +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__ */ + diff --git a/src/mimeview.c b/src/mimeview.c index dc3b013c7..4b47d83e0 100644 --- a/src/mimeview.c +++ b/src/mimeview.c @@ -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, diff --git a/src/plugins/trayicon/libeggtrayicon/Makefile.am b/src/plugins/trayicon/libeggtrayicon/Makefile.am index 47294b405..78665561d 100644 --- a/src/plugins/trayicon/libeggtrayicon/Makefile.am +++ b/src/plugins/trayicon/libeggtrayicon/Makefile.am @@ -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) diff --git a/src/plugins/trayicon/libeggtrayicon/eggtrayicon.c b/src/plugins/trayicon/libeggtrayicon/eggtrayicon.c index 4217fd8be..6c309306e 100644 --- a/src/plugins/trayicon/libeggtrayicon/eggtrayicon.c +++ b/src/plugins/trayicon/libeggtrayicon/eggtrayicon.c @@ -18,39 +18,73 @@ * Boston, MA 02111-1307, USA. */ +#include #include -#include +#include + #include "eggtrayicon.h" +#include +#include + +#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; +} diff --git a/src/plugins/trayicon/libeggtrayicon/eggtrayicon.h b/src/plugins/trayicon/libeggtrayicon/eggtrayicon.h index 7d0c6e2d6..007f4c18e 100644 --- a/src/plugins/trayicon/libeggtrayicon/eggtrayicon.h +++ b/src/plugins/trayicon/libeggtrayicon/eggtrayicon.h @@ -21,48 +21,45 @@ #ifndef __EGG_TRAY_ICON_H__ #define __EGG_TRAY_ICON_H__ -#include "gtkplugxembed.h" +#include #include -#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__ */ diff --git a/src/plugins/trayicon/trayicon.c b/src/plugins/trayicon/trayicon.c index 7f1b18f3e..af09fe327 100644 --- a/src/plugins/trayicon/trayicon.c +++ b/src/plugins/trayicon/trayicon.c @@ -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", diff --git a/src/ssl_manager.c b/src/ssl_manager.c index 889e569c6..09d69420b 100644 --- a/src/ssl_manager.c +++ b/src/ssl_manager.c @@ -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); diff --git a/src/summaryview.c b/src/summaryview.c index 0af851831..eca14b541 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -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) diff --git a/src/toolbar.c b/src/toolbar.c index e02bc9985..8c986c0f4 100644 --- a/src/toolbar.c +++ b/src/toolbar.c @@ -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, "\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, -- 2.25.1