70 lines
2.0 KiB
Diff
70 lines
2.0 KiB
Diff
--- a/src/pidgin-libnotify.c 2013-05-07 17:38:31.397261982 +0200
|
|
+++ b/src2/pidgin-libnotify.c 2013-05-07 17:43:43.787904584 +0200
|
|
@@ -169,6 +169,49 @@ pixbuf_from_buddy_icon (PurpleBuddyIcon
|
|
return icon;
|
|
}
|
|
|
|
+/* Taken from pidgin-hotkeys to get focus on conversation window */
|
|
+static void
|
|
+hacky_active_window(GtkWidget *window)
|
|
+{
|
|
+ GdkScreen *screen;
|
|
+ GdkWindow *root;
|
|
+ GdkDisplay *display;
|
|
+ Display *xdisplay;
|
|
+ Window xroot;
|
|
+ XEvent xev;
|
|
+ static Atom _net_active_window = None;
|
|
+
|
|
+ screen = gtk_widget_get_screen(window);
|
|
+ root = gdk_screen_get_root_window(screen);
|
|
+ display = gdk_screen_get_display(screen);
|
|
+
|
|
+ xdisplay = GDK_DISPLAY_XDISPLAY(display);
|
|
+ xroot = GDK_WINDOW_XWINDOW(root);
|
|
+
|
|
+ if (_net_active_window == None)
|
|
+ _net_active_window = XInternAtom(xdisplay,
|
|
+ "_NET_ACTIVE_WINDOW",
|
|
+ False);
|
|
+
|
|
+ xev.xclient.type = ClientMessage;
|
|
+ xev.xclient.serial = 0;
|
|
+ xev.xclient.send_event = True;
|
|
+ xev.xclient.window = GDK_WINDOW_XWINDOW(window->window);
|
|
+ xev.xclient.message_type = _net_active_window;
|
|
+ xev.xclient.format = 32;
|
|
+ xev.xclient.data.l[0] = 1; /* requestor type; we're an app, I guess */
|
|
+ xev.xclient.data.l[1] = CurrentTime;
|
|
+ xev.xclient.data.l[2] = None; /* "currently active window", supposedly */
|
|
+ xev.xclient.data.l[3] = 0;
|
|
+ xev.xclient.data.l[4] = 0;
|
|
+
|
|
+ XSendEvent(xdisplay,
|
|
+ xroot, False,
|
|
+ SubstructureRedirectMask | SubstructureNotifyMask,
|
|
+ &xev);
|
|
+}
|
|
+
|
|
+
|
|
static void
|
|
action_cb (NotifyNotification *notification,
|
|
gchar *action, gpointer user_data)
|
|
@@ -194,6 +237,16 @@ action_cb (NotifyNotification *notificat
|
|
buddy->name);
|
|
}
|
|
conv->ui_ops->present (conv);
|
|
+
|
|
+ /* get the focus on the new conversation window */
|
|
+ {
|
|
+ GtkWindow *gtkwindow;
|
|
+
|
|
+ gtkwindow = GTK_WINDOW(pidgin_conv_get_window(PIDGIN_CONVERSATION(conv))->window);
|
|
+ /*gtk_window_present(gtkwindow);*/
|
|
+ hacky_active_window(GTK_WIDGET(gtkwindow));
|
|
+ }
|
|
+
|
|
|
|
notify_notification_close (notification, NULL);
|
|
}
|