src/browser.c

Sat, 26 Apr 2003 20:30:43 +0000

author
Nathan Walp <nwalp@pidgin.im>
date
Sat, 26 Apr 2003 20:30:43 +0000
changeset 5234
8320a1cb0274
parent 5213
d56ea526b80c
child 5435
990c340ecb6d
permissions
-rw-r--r--

[gaim-migrate @ 5604]
Chats in the buddy list!

You can now put chat rooms in your buddy list, and double-click them to join
them, instead of having to do all that typing. I'm eventually gonna add
auto-join support, so that ugly hack involving pouncing can go away.

Someone should make some new artwork so we don't have 2 + icons next to
each other in the menus.

This also has some fixes to let gaim compile again, after the renaming of
the buddy list files.

This also fixes the problem with offline buddies not showing up in the list
sometimes for accounts that didn't log in at startup.

This probably fixes other stuff, but I can't remember any of it off the top
of my head.

I'm going to stop typing and let people play with this now.

1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1 /*
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2 * gaim
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
5 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
6 * some code: (most in this file)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
7 * Copyright (C) 1996 Netscape Communications Corporation, all rights reserved.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
8 * Created: Jamie Zawinski <jwz@netscape.com>, 24-Dec-94.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
9 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
13 * (at your option) any later version.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
14 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
18 * GNU General Public License for more details.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
19 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
23 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
24 * This code is mainly taken from Netscape's sample implementation of
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
25 * their protocol. Nifty.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
26 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
27 */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
28
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
29
349
6f7d28b0f98d [gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 79
diff changeset
30 #ifdef HAVE_CONFIG_H
2090
bab8b7e309db [gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2077
diff changeset
31 #include <config.h>
349
6f7d28b0f98d [gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 79
diff changeset
32 #endif
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3554
diff changeset
33 #ifdef _WIN32
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3554
diff changeset
34 #include <gdk/gdkwin32.h>
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3554
diff changeset
35 #else
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3554
diff changeset
36 #include <unistd.h>
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
37 #ifndef HOST_NAME_MAX
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
38 #define HOST_NAME_MAX 255
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
39 #endif
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3554
diff changeset
40 #include <gdk/gdkx.h>
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3554
diff changeset
41 #endif
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
42 #include <stdio.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
43 #include <stdlib.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
44 #include <string.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
45
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
46
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
47
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
48
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
49 #include <gtk/gtk.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
50 #include <gdk/gdkprivate.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
51 #include "gaim.h"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
52
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
53 #ifndef _WIN32
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
54
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
55
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
56
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
57
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
58 #include <X11/Xlib.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
59 #include <X11/Xatom.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
60
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
61
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
62 static const char *progname = "gaim";
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
63 static const char *expected_mozilla_version = "1.1";
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
64
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
65 #define MOZILLA_VERSION_PROP "_MOZILLA_VERSION"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
66 #define MOZILLA_LOCK_PROP "_MOZILLA_LOCK"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
67 #define MOZILLA_COMMAND_PROP "_MOZILLA_COMMAND"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
68 #define MOZILLA_RESPONSE_PROP "_MOZILLA_RESPONSE"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
69
3466
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
70 static GdkAtom GDKA_MOZILLA_VERSION = 0;
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
71 static GdkAtom GDKA_MOZILLA_LOCK = 0;
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
72 static GdkAtom GDKA_MOZILLA_COMMAND = 0;
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
73 static GdkAtom GDKA_MOZILLA_RESPONSE = 0;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
74
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
75 static char *window_check_mozilla_version(Window);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
76 static const char *get_lock_data();
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
77 static GdkFilterReturn netscape_response_cb(XEvent *, GdkEvent *, GdkWindow *);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
78 static gboolean netscape_command(const char *);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
79
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
80 static int netscape_lock;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
81
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
82
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
83 static Window VirtualRootWindowOfScreen(screen)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
84 Screen *screen;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
85 {
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
86 static Screen *save_screen = (Screen *) 0;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
87 static Window root = (Window) 0;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
88
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
89 if (screen != save_screen) {
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
90 Display *dpy = DisplayOfScreen(screen);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
91 Atom __SWM_VROOT = None;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
92 unsigned int i;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
93 Window rootReturn, parentReturn, *children;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
94 unsigned int numChildren;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
95
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
96 root = RootWindowOfScreen(screen);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
97
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
98 /* go look for a virtual root */
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
99 __SWM_VROOT = XInternAtom(dpy, "__SWM_VROOT", False);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
100 if (XQueryTree(dpy, root, &rootReturn, &parentReturn, &children, &numChildren)) {
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
101 for (i = 0; i < numChildren; i++) {
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
102 Atom actual_type;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
103 int actual_format;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
104 unsigned long nitems, bytesafter;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
105 Window *newRoot = (Window *) 0;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
106
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
107 if (XGetWindowProperty(dpy, children[i],
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
108 __SWM_VROOT, 0, 1, False, XA_WINDOW,
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
109 &actual_type, &actual_format,
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
110 &nitems, &bytesafter,
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2099
diff changeset
111 (unsigned char **)&newRoot) == Success
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2099
diff changeset
112 && newRoot) {
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
113 root = *newRoot;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
114 break;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
115 }
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
116 }
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
117 if (children)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
118 XFree((char *)children);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
119 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
120
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
121 save_screen = screen;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
122 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
123
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
124 return root;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
125 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
126
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
127 /* The following code is Copyright (C) 1989 X Consortium */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
128
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
129 static Window TryChildren();
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
130
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
131 /* Find a window with WM_STATE, else return win itself, as per ICCCM */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
132
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
133 static Window GClientWindow(dpy, win)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
134 Display *dpy;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
135 Window win;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
136 {
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
137 Atom WM_STATE;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
138 Atom type = None;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
139 int format;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
140 unsigned long nitems, after;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
141 unsigned char *data;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
142 Window inf;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
143
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
144 WM_STATE = XInternAtom(dpy, "WM_STATE", True);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
145 if (!WM_STATE)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
146 return win;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
147 XGetWindowProperty(dpy, win, WM_STATE, 0, 0, False, AnyPropertyType,
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
148 &type, &format, &nitems, &after, &data);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
149 if (type) {
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
150 XFree(data);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
151 return win;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
152 }
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
153
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
154 inf = TryChildren(dpy, win, WM_STATE);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
155 if (!inf)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
156 inf = win;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
157
26
755450f228e1 [gaim-migrate @ 35]
Peter Teichman
parents: 1
diff changeset
158 XFree(data);
755450f228e1 [gaim-migrate @ 35]
Peter Teichman
parents: 1
diff changeset
159
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
160 return inf;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
161 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
162
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
163 static
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
164 Window TryChildren(dpy, win, WM_STATE)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
165 Display *dpy;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
166 Window win;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
167 Atom WM_STATE;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
168 {
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
169 Window root, parent;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
170 Window *children;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
171 unsigned int nchildren;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
172 unsigned int i;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
173 Atom type = None;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
174 int format;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
175 unsigned long nitems, after;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
176 unsigned char *data;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
177 Window inf = 0;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
178
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
179 if (!XQueryTree(dpy, win, &root, &parent, &children, &nchildren))
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
180 return 0;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
181 for (i = 0; !inf && (i < nchildren); i++) {
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
182 XGetWindowProperty(dpy, children[i], WM_STATE, 0, 0, False,
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
183 AnyPropertyType, &type, &format, &nitems, &after, &data);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
184 if (type)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
185 inf = children[i];
26
755450f228e1 [gaim-migrate @ 35]
Peter Teichman
parents: 1
diff changeset
186
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
187 XFree(data);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
188 }
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
189 for (i = 0; !inf && (i < nchildren); i++)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
190 inf = TryChildren(dpy, children[i], WM_STATE);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
191 if (children)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
192 XFree((char *)children);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
193 return inf;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
194 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
195
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
196 /* END X Consortium code */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
197
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
198
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
199
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
200 static void mozilla_remote_init_atoms()
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
201 {
3466
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
202 if (!GDKA_MOZILLA_VERSION)
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
203 GDKA_MOZILLA_VERSION = gdk_atom_intern(MOZILLA_VERSION_PROP, 0);
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
204 if (!GDKA_MOZILLA_LOCK)
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
205 GDKA_MOZILLA_LOCK = gdk_atom_intern(MOZILLA_LOCK_PROP, 0);
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
206 if (!GDKA_MOZILLA_COMMAND)
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
207 GDKA_MOZILLA_COMMAND = gdk_atom_intern(MOZILLA_COMMAND_PROP, 0);
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
208 if (!GDKA_MOZILLA_RESPONSE)
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
209 GDKA_MOZILLA_RESPONSE = gdk_atom_intern(MOZILLA_RESPONSE_PROP, 0);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
210 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
211
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
212 static char *window_check_mozilla_version(Window window) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
213
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
214 Atom type;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
215 int format;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
216 unsigned long nitems, bytesafter;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
217 unsigned char *version = 0;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
218 gchar *retval = NULL;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
219
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
220 if (XGetWindowProperty(gdk_display, window,
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
221 gdk_x11_atom_to_xatom(GDKA_MOZILLA_VERSION),
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
222 0, (65536 / sizeof(long)),
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
223 False, XA_STRING,
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
224 &type, &format, &nitems, &bytesafter,
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
225 &version) != Success) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
226 return NULL;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
227 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
228
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
229 if (!version) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
230 return NULL;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
231 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
232
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
233 retval = g_strdup(version);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
234 XFree(version);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
235
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
236 return retval;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
237 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
238
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
239 static GdkWindow *mozilla_remote_find_window()
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
240 {
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
241 int i;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
242 Window root = VirtualRootWindowOfScreen(DefaultScreenOfDisplay(gdk_display));
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
243 Window root2, parent, *kids;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
244 unsigned int nkids;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
245 Window result = 0;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
246 Window tenative = 0;
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
247 unsigned char *tenative_version = 0, *version = 0;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
248 static GdkWindow *remote_window = NULL;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
249
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
250 if (remote_window != NULL) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
251 version = window_check_mozilla_version(GDK_WINDOW_XID(remote_window));
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
252
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
253 if (version != NULL) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
254 g_free(version);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
255 return remote_window;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
256 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
257 g_free(version);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
258
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
259 gdk_window_destroy(remote_window);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
260 remote_window = NULL;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
261 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
262
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
263 if (!XQueryTree(gdk_display, root, &root2, &parent, &kids, &nkids)) {
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
264 gaim_debug(GAIM_DEBUG_ERROR, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
265 "%s: XQueryTree failed on display %s\n",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
266 progname, DisplayString(gdk_display));
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
267 return NULL;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
268 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
269
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
270 /* root != root2 is possible with virtual root WMs. */
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
271
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
272 if (!(kids && nkids)) {
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
273 gaim_debug(GAIM_DEBUG_ERROR, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
274 "%s: root window has no children on display %s\n",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
275 progname, DisplayString(gdk_display));
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
276 return NULL;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
277 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
278
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
279 for (i = nkids - 1; i >= 0; i--) {
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
280 Window w = GClientWindow(gdk_display, kids[i]);
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
281
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
282 version = window_check_mozilla_version(w);
26
755450f228e1 [gaim-migrate @ 35]
Peter Teichman
parents: 1
diff changeset
283
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
284 if (version == NULL) {
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
285 continue;
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
286 }
26
755450f228e1 [gaim-migrate @ 35]
Peter Teichman
parents: 1
diff changeset
287
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
288 if (strcmp((char *)version, expected_mozilla_version) && !tenative) {
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
289 tenative = w;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
290 tenative_version = version;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
291 continue;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
292 }
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
293
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
294 g_free(version);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
295
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
296 result = w;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
297 break;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
298 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
299
26
755450f228e1 [gaim-migrate @ 35]
Peter Teichman
parents: 1
diff changeset
300 XFree(kids);
755450f228e1 [gaim-migrate @ 35]
Peter Teichman
parents: 1
diff changeset
301
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
302 if (result && tenative) {
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
303 gaim_debug(GAIM_DEBUG_WARNING, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
304 "%s: both version %s (0x%x) and version %s (%0x%x) "
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
305 "are running. Using version %s.\n",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
306 progname, tenative_version, (unsigned int)tenative,
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
307 expected_mozilla_version, (unsigned int)result,
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
308 expected_mozilla_version);
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
309 XFree(tenative_version);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
310 return gdk_window_foreign_new(result);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
311 } else if (tenative) {
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
312 gaim_debug(GAIM_DEBUG_WARNING, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
313 "%s: expected version %s but found version %s (0x%x) "
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
314 "instead.\n",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
315 progname, expected_mozilla_version,
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
316 tenative_version, (unsigned int)tenative);
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
317 XFree(tenative_version);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
318 return gdk_window_foreign_new(tenative);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
319 } else if (result) {
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
320 return gdk_window_foreign_new(result);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
321 } else {
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
322 gaim_debug(GAIM_DEBUG_ERROR, "%s: not running on display %s\n",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
323 progname, DisplayString(gdk_display));
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
324 return NULL;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
325 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
326 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
327
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
328
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
329 static const char *get_lock_data() {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
330 static char *lock_data = NULL;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
331
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
332 if (lock_data == NULL) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
333 char hostname[HOST_NAME_MAX + 1] = {0};
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
334
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
335 if (gethostname(hostname, HOST_NAME_MAX + 1) == 0) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
336 lock_data = g_strdup_printf("pid%d@%s", getpid(), hostname);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
337 } else {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
338 lock_data = g_strdup_printf("pid%d", getpid());
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
339 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
340 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
341
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
342 return lock_data;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
343 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
344
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
345 static void mozilla_remote_obtain_lock(GdkWindow * window)
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
346 {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
347 gboolean locked = False;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
348 const char *lock_data = get_lock_data();
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
349 GdkAtom actual_type;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
350 gint actual_format;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
351 gint nitems;
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
352 unsigned char *data = 0;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
353
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
354 gdk_x11_grab_server();
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
355 if (!gdk_property_get(window, GDKA_MOZILLA_LOCK,
3466
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
356 gdk_x11_xatom_to_atom (XA_STRING), 0,
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
357 (65536 / sizeof(long)), 0,
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
358 &actual_type, &actual_format, &nitems, &data)) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
359
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
360 /* It's not now locked - lock it. */
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
361 gaim_debug(GAIM_DEBUG_MISC, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
362 "%s: writing " MOZILLA_LOCK_PROP " \"%s\" to 0x%x\n",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
363 progname, lock_data, (unsigned int)window);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
364
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
365 gdk_property_change(window, GDKA_MOZILLA_LOCK,
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
366 gdk_x11_xatom_to_atom (XA_STRING),
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
367 8, PropModeReplace,
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
368 (unsigned char *)lock_data, strlen(lock_data));
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
369 locked = True;
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
370 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
371
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
372 if (data)
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
373 g_free(data);
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
374
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
375 gdk_x11_ungrab_server();
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
376 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
377
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
378
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
379 static void mozilla_remote_free_lock(GdkWindow * window)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
380 {
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
381 int result = 0;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
382 GdkAtom actual_type;
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
383 gint actual_format;
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
384 gint nitems;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
385 unsigned char *data = 0;
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
386 const char *lock_data = get_lock_data();
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
387
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
388 gaim_debug(GAIM_DEBUG_MISC, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
389 "%s: deleting " MOZILLA_LOCK_PROP " \"%s\" from 0x%x\n",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
390 progname, lock_data, (unsigned int)window);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
391
3466
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
392 result = gdk_property_get(window, GDKA_MOZILLA_LOCK,
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
393 gdk_x11_xatom_to_atom (XA_STRING),
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
394 0, (65536 / sizeof(long)),
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
395 1, &actual_type, &actual_format, &nitems, &data);
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
396
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
397 if (result != TRUE) {
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
398 gaim_debug(GAIM_DEBUG_ERROR, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
399 "%s: Unable to read and delete " MOZILLA_LOCK_PROP
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
400 " property\n", progname);
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
401 return;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
402 } else if (!data || !*data) {
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
403 gaim_debug(GAIM_DEBUG_ERROR, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
404 "%s: Invalid data on " MOZILLA_LOCK_PROP
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
405 " of wnidow 0x%x\n", progname, (unsigned int)window);
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
406 return;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
407 } else if (strcmp((char *)data, lock_data)) {
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
408 gaim_debug(GAIM_DEBUG_ERROR, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
409 "%s: " MOZILLA_LOCK_PROP " was stolen! Expected \"%s\", "
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
410 "saw \"%s\"!\n", progname, lock_data, data);
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
411 return;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
412 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
413
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
414 XFree(data);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
415 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
416
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
417 static GdkFilterReturn netscape_response_cb(XEvent *event, GdkEvent *translated, GdkWindow *window)
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
418 {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
419 Atom actual_type, mozilla_response;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
420 Window xid;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
421 int actual_format;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
422 unsigned long nitems, bytes_after;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
423 unsigned char *data = 0;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
424
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
425 if (window == NULL || GDK_WINDOW_OBJECT(window)->destroyed) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
426 do_error_dialog(_("Communication with the browser failed. Please close all "
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
427 "windows and try again."), NULL, GAIM_ERROR);
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
428 gaim_debug(GAIM_DEBUG_WARNING, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
429 "netscape_response_cb called with NULL window.\n");
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
430 return GDK_FILTER_CONTINUE;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
431 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
432
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
433 mozilla_response = gdk_x11_atom_to_xatom(GDKA_MOZILLA_RESPONSE);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
434 xid = GDK_WINDOW_XID(window);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
435
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
436 /* If the event isn't what we want then let gtk handle it */
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
437 if (event->xany.type != PropertyNotify ||
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
438 event->xproperty.state != PropertyNewValue ||
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
439 event->xproperty.window != xid ||
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
440 event->xproperty.atom != mozilla_response) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
441 return GDK_FILTER_CONTINUE;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
442 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
443
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
444 if (XGetWindowProperty (gdk_display, xid, mozilla_response,
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
445 0, (65536 / sizeof (long)),
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
446 True,
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
447 XA_STRING,
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
448 &actual_type, &actual_format,
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
449 &nitems, &bytes_after,
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
450 &data) != Success
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
451 || data == NULL || (data[0] != '1' && data[0] != '2')) {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
452
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
453 do_error_dialog(_("Communication with the browser failed. Please close all "
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
454 "windows and try again."), NULL, GAIM_ERROR);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
455 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
456
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
457 if (data[0] == '1') {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
458 /* Netscape isn't ready yet */
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
459 gaim_debug(GAIM_DEBUG_ERROR, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
460 "Remote Netscape window isn't ready yet.\n");
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
461 return GDK_FILTER_REMOVE;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
462 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
463
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
464 if (data[0] == '2') {
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
465 /* Yay! It worked */
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
466 gaim_debug(GAIM_DEBUG_INFO, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
467 "Successfully sent command to remote Netscape window.\n");
4428
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
468 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
469
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
470 gdk_window_remove_filter(window, (GdkFilterFunc) netscape_response_cb, window);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
471 mozilla_remote_free_lock(window);
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
472 netscape_lock = 0;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
473 return GDK_FILTER_REMOVE;
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
474 }
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
475
b999b2c3d182 [gaim-migrate @ 4703]
Ray Strode
parents: 4189
diff changeset
476 static void mozilla_remote_command(GdkWindow * window, const char *command, Bool raise_p)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
477 {
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
478 char *new_command = 0;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
479
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
480 /* The -noraise option is implemented by passing a "noraise" argument
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
481 to each command to which it should apply.
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
482 */
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
483 if (!raise_p) {
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
484 char *close;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
485 new_command = g_malloc(strlen(command) + 20);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
486 strcpy(new_command, command);
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
487 close = strrchr(new_command, ')');
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
488 if (close)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
489 strcpy(close, ", noraise)");
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
490 else
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
491 strcat(new_command, "(noraise)");
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
492 command = new_command;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
493 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
494
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
495 gaim_debug(GAIM_DEBUG_MISC, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
496 "%s: Writing " MOZILLA_COMMAND_PROP " \"%s\" to 0x%x\n",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
497 progname, command, (unsigned int)window);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
498
3466
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
499 gdk_property_change(window, GDKA_MOZILLA_COMMAND,
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
500 gdk_x11_xatom_to_atom (XA_STRING),
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3455
diff changeset
501 8, GDK_PROP_MODE_REPLACE, (unsigned char *)command, strlen(command));
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
502
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
503 gdk_window_add_filter(window, (GdkFilterFunc) netscape_response_cb, window);
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
504 }
4430
95df701e8cdf [gaim-migrate @ 4705]
Robert McQueen <robot101@debian.org>
parents: 4429
diff changeset
505
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
506 static gboolean netscape_command(const char *command)
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
507 {
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
508 GdkWindow *window = NULL;
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
509
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
510 if (netscape_lock) {
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
511 gaim_debug(GAIM_DEBUG_WARNING, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
512 "netscape_command() is currently in use.\n");
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
513 return FALSE;
4430
95df701e8cdf [gaim-migrate @ 4705]
Robert McQueen <robot101@debian.org>
parents: 4429
diff changeset
514 }
95df701e8cdf [gaim-migrate @ 4705]
Robert McQueen <robot101@debian.org>
parents: 4429
diff changeset
515
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
516 netscape_lock = 1;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
517
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
518 mozilla_remote_init_atoms();
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
519 window = mozilla_remote_find_window();
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
520
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
521 if (window == NULL || (GDK_WINDOW_OBJECT(window)->destroyed == TRUE)) {
5213
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
522 gaim_debug(GAIM_DEBUG_ERROR, "browser",
d56ea526b80c [gaim-migrate @ 5583]
Christian Hammond <chipx86@chipx86.com>
parents: 4885
diff changeset
523 "Remote window absent or unsuitable.\n");
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
524 netscape_lock = 0;
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
525 return FALSE;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
526 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
527
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
528 mozilla_remote_command(window, command, False);
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
529
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
530 netscape_lock = 0;
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
531 return TRUE;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
532 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
533
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
534 void open_url(GtkWidget *w, char *url)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
535 {
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
536 char *command = NULL;
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
537 GError *error = NULL;
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
538
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
539 switch (web_browser) {
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
540 case BROWSER_NETSCAPE: {
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
541 char *args = NULL;
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
542
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
543 if (misc_options & OPT_MISC_BROWSER_POPUP)
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
544 args = g_strdup_printf("OpenURL(%s, new-window)", url);
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
545 else
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
546 args = g_strdup_printf("OpenURL(%s)", url);
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
547
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
548 if (netscape_command(args)) {
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
549 g_free(args);
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
550 return;
2827
e3d10df95e74 [gaim-migrate @ 2840]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2781
diff changeset
551 }
2566
4f568585ac2a [gaim-migrate @ 2579]
Brian Enigma
parents: 2478
diff changeset
552
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
553 /* if netscape is running ...
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
554 command = g_strdup_printf("netscape -remote %s", args); */
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
555
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
556 command = g_strdup_printf("netscape \"%s\"", url);
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
557 g_free(args);
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
558 } break;
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
559
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
560 case BROWSER_OPERA:
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
561 if (misc_options & OPT_MISC_BROWSER_POPUP)
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
562 command = g_strdup_printf("opera -newwindow \"%s\"", url);
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
563 else
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
564 command = g_strdup_printf("opera \"%s\"", url);
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
565 break;
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
566
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
567 case BROWSER_KONQ:
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
568 command = g_strdup_printf("kfmclient openURL \"%s\"", url);
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
569 break;
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
570
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
571 case BROWSER_GALEON:
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
572 if (misc_options & OPT_MISC_BROWSER_POPUP)
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
573 command = g_strdup_printf("galeon -w \"%s\"", url);
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
574 else
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
575 command = g_strdup_printf("galeon \"%s\"", url);
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
576 break;
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
577
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
578 case BROWSER_MOZILLA:
4551
b7dde2b75007 [gaim-migrate @ 4831]
Nathan Walp <nwalp@pidgin.im>
parents: 4431
diff changeset
579 command = g_strdup_printf("mozilla \"%s\"", url);
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
580 break;
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
581
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
582 case BROWSER_MANUAL: {
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
583 char *space_free_url = NULL;
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
584
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
585 if (!web_command[0]) {
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
586 do_error_dialog(_("Unable to launch your browser because the 'Manual' browser command has been chosen, but no command has been set."), NULL, GAIM_ERROR);
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
587 return;
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
588 }
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
589
4580
f58469d9d3df [gaim-migrate @ 4861]
Ari Pollak <ari@debian.org>
parents: 4551
diff changeset
590 space_free_url = g_strdup(url);
f58469d9d3df [gaim-migrate @ 4861]
Ari Pollak <ari@debian.org>
parents: 4551
diff changeset
591 g_strdelimit(space_free_url, " ", '+');
4885
79c3c7b53e70 [gaim-migrate @ 5215]
Nathan Walp <nwalp@pidgin.im>
parents: 4580
diff changeset
592 if(strstr(web_command, "%s"))
79c3c7b53e70 [gaim-migrate @ 5215]
Nathan Walp <nwalp@pidgin.im>
parents: 4580
diff changeset
593 command = g_strdup_printf(web_command, space_free_url);
79c3c7b53e70 [gaim-migrate @ 5215]
Nathan Walp <nwalp@pidgin.im>
parents: 4580
diff changeset
594 else
79c3c7b53e70 [gaim-migrate @ 5215]
Nathan Walp <nwalp@pidgin.im>
parents: 4580
diff changeset
595 command = g_strdup_printf("%s %s", web_command, space_free_url);
79c3c7b53e70 [gaim-migrate @ 5215]
Nathan Walp <nwalp@pidgin.im>
parents: 4580
diff changeset
596 g_free(space_free_url);
79c3c7b53e70 [gaim-migrate @ 5215]
Nathan Walp <nwalp@pidgin.im>
parents: 4580
diff changeset
597 } break;
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
598 }
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
599
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
600 if (g_spawn_command_line_async(command, &error) == FALSE) {
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
601 char *tmp = g_strdup_printf(_("There was an error launching your chosen browser: %s"), error->message);
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
602 do_error_dialog(tmp, NULL, GAIM_ERROR);
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
603 g_free(tmp);
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
604 g_error_free(error);
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
605 }
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
606
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
607 g_free(command);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
608 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
609
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
610 void add_bookmark(GtkWidget *w, char *url)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
611 {
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
612 if (web_browser == BROWSER_NETSCAPE) {
4431
c0a9b9f3924f [gaim-migrate @ 4706]
Robert McQueen <robot101@debian.org>
parents: 4430
diff changeset
613 char *command = g_strdup_printf("AddBookmark(%s)", url);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
614
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
615 netscape_command(command);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
616 g_free(command);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
617 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
618 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
619
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
620 #else
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
621
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
622 /* Sooner or later, I shall support Windows clicking! */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
623
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
624 void add_bookmark(GtkWidget *w, char *url)
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
625 {
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
626 }
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3554
diff changeset
627 void open_url(GtkWidget *w, char *url)
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
628 {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3554
diff changeset
629 ShellExecute(NULL, NULL, url, NULL, ".\\", 0);
1250
46ac03911ab0 [gaim-migrate @ 1260]
Decklin Foster <decklin@red-bean.com>
parents: 1181
diff changeset
630 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
631
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
632
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2099
diff changeset
633 #endif /* _WIN32 */

mercurial