--- src/pidgin-libnotify.c 2013-05-07 17:38:31.397261982 +0200 +++ 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); }