Mercurial > pidgin
annotate finch/libgnt/gntmain.c @ 32797:aacfb71133cc
Fix a possible MSN remote crash
Incoming messages with certain characters or character encodings
can cause clients to crash. The fix is for the contents of all
incoming plaintext messages are converted to UTF-8 and validated
before used.
This was reported to us by Fabian Yamaguchi and this patch was written
by Elliott Sales de Andrade (maybe with small, insignificant changes by me)
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 07 May 2012 03:18:08 +0000 |
parents | a8cc50c2279f |
children |
rev | line source |
---|---|
18049
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
1 /** |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
2 * GNT - The GLib Ncurses Toolkit |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
3 * |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
4 * GNT is the legal property of its developers, whose names are too numerous |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
6 * source distribution. |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
7 * |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
8 * This library is free software; you can redistribute it and/or modify |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
11 * (at your option) any later version. |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
12 * |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
16 * GNU General Public License for more details. |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
17 * |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19179
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
18049
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
21 */ |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
22 |
15817 | 23 #define _GNU_SOURCE |
24920
ea28a7b9113c
Compilation fixes for OpenBSD from the OpenBSD ports tree. Closes #8009.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24558
diff
changeset
|
24 #if (defined(__APPLE__) || defined(__unix__)) && !defined(__FreeBSD__) && !defined(__OpenBSD__) |
15817 | 25 #define _XOPEN_SOURCE_EXTENDED |
26 #endif | |
27 | |
28 #include "config.h" | |
29 | |
30 #include <gmodule.h> | |
31 | |
32 #include <sys/types.h> | |
33 #include <sys/wait.h> | |
34 | |
24558
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22713
diff
changeset
|
35 #include "gntinternal.h" |
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22713
diff
changeset
|
36 #undef GNT_LOG_DOMAIN |
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22713
diff
changeset
|
37 #define GNT_LOG_DOMAIN "Main" |
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22713
diff
changeset
|
38 |
15817 | 39 #include "gnt.h" |
40 #include "gntbox.h" | |
16888
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
41 #include "gntbutton.h" |
15817 | 42 #include "gntcolors.h" |
43 #include "gntclipboard.h" | |
44 #include "gntkeys.h" | |
16888
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
45 #include "gntlabel.h" |
15817 | 46 #include "gntmenu.h" |
47 #include "gntstyle.h" | |
48 #include "gnttree.h" | |
49 #include "gntutils.h" | |
16888
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
50 #include "gntwindow.h" |
15817 | 51 #include "gntwm.h" |
52 | |
53 #include <panel.h> | |
54 | |
55 #include <stdio.h> | |
56 #include <stdlib.h> | |
57 #include <locale.h> | |
58 #include <unistd.h> | |
59 #include <signal.h> | |
60 #include <string.h> | |
61 #include <ctype.h> | |
62 #include <errno.h> | |
63 | |
64 /** | |
65 * Notes: Interesting functions to look at: | |
66 * scr_dump, scr_init, scr_restore: for workspaces | |
67 * | |
68 * Need to wattrset for colors to use with PDCurses. | |
69 */ | |
70 | |
71 static GIOChannel *channel = NULL; | |
28142
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
72 static guint channel_read_callback = 0; |
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
73 static guint channel_error_callback = 0; |
15817 | 74 |
75 static gboolean ascii_only; | |
76 static gboolean mouse_enabled; | |
77 | |
78 static void setup_io(void); | |
79 | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21720
diff
changeset
|
80 static gboolean refresh_screen(void); |
15817 | 81 |
18049
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17812
diff
changeset
|
82 static GntWM *wm; |
15817 | 83 static GntClipboard *clipboard; |
84 | |
28604
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
85 int gnt_need_conversation_to_locale; |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
86 |
15817 | 87 #define HOLDING_ESCAPE (escape_stuff.timer != 0) |
88 | |
89 static struct { | |
90 int timer; | |
91 } escape_stuff; | |
92 | |
93 static gboolean | |
94 escape_timeout(gpointer data) | |
95 { | |
96 gnt_wm_process_input(wm, "\033"); | |
97 escape_stuff.timer = 0; | |
98 return FALSE; | |
99 } | |
100 | |
101 /** | |
102 * Mouse support: | |
103 * - bring a window on top if you click on its taskbar | |
104 * - click on the top-bar of the active window and drag+drop to move a window | |
105 * - click on a window to bring it to focus | |
106 * - allow scrolling in tree/textview on wheel-scroll event | |
107 * - click to activate button or select a row in tree | |
108 * wishlist: | |
109 * - have a little [X] on the windows, and clicking it will close that window. | |
110 */ | |
111 static gboolean | |
112 detect_mouse_action(const char *buffer) | |
113 { | |
114 int x, y; | |
115 static enum { | |
116 MOUSE_NONE, | |
117 MOUSE_LEFT, | |
118 MOUSE_RIGHT, | |
119 MOUSE_MIDDLE | |
120 } button = MOUSE_NONE; | |
121 static GntWidget *remember = NULL; | |
122 static int offset = 0; | |
123 GntMouseEvent event; | |
124 GntWidget *widget = NULL; | |
125 PANEL *p = NULL; | |
126 | |
17698
56d2ae9cbb5c
Initial workspace support. refs #51
Richard Nelson <wabz@pidgin.im>
parents:
16281
diff
changeset
|
127 if (!wm->cws->ordered || buffer[0] != 27) |
15817 | 128 return FALSE; |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
28604
diff
changeset
|
129 |
15817 | 130 buffer++; |
131 if (strlen(buffer) < 5) | |
132 return FALSE; | |
133 | |
134 x = buffer[3]; | |
135 y = buffer[4]; | |
136 if (x < 0) x += 256; | |
137 if (y < 0) y += 256; | |
138 x -= 33; | |
139 y -= 33; | |
140 | |
141 while ((p = panel_below(p)) != NULL) { | |
142 const GntNode *node = panel_userptr(p); | |
143 GntWidget *wid; | |
144 if (!node) | |
145 continue; | |
146 wid = node->me; | |
147 if (x >= wid->priv.x && x < wid->priv.x + wid->priv.width) { | |
148 if (y >= wid->priv.y && y < wid->priv.y + wid->priv.height) { | |
149 widget = wid; | |
150 break; | |
151 } | |
152 } | |
153 } | |
154 | |
155 if (strncmp(buffer, "[M ", 3) == 0) { | |
156 /* left button down */ | |
157 /* Bring the window you clicked on to front */ | |
158 /* If you click on the topbar, then you can drag to move the window */ | |
159 event = GNT_LEFT_MOUSE_DOWN; | |
160 } else if (strncmp(buffer, "[M\"", 3) == 0) { | |
161 /* right button down */ | |
162 event = GNT_RIGHT_MOUSE_DOWN; | |
163 } else if (strncmp(buffer, "[M!", 3) == 0) { | |
164 /* middle button down */ | |
165 event = GNT_MIDDLE_MOUSE_DOWN; | |
166 } else if (strncmp(buffer, "[M`", 3) == 0) { | |
167 /* wheel up*/ | |
168 event = GNT_MOUSE_SCROLL_UP; | |
169 } else if (strncmp(buffer, "[Ma", 3) == 0) { | |
170 /* wheel down */ | |
171 event = GNT_MOUSE_SCROLL_DOWN; | |
172 } else if (strncmp(buffer, "[M#", 3) == 0) { | |
173 /* button up */ | |
174 event = GNT_MOUSE_UP; | |
175 } else | |
176 return FALSE; | |
17047
a19b8d71f868
Do not process clicks on no widget.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16888
diff
changeset
|
177 |
17053
541c5ed54e90
Fix the commit from earlier today about null-widgets.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17047
diff
changeset
|
178 if (widget && gnt_wm_process_click(wm, event, x, y, widget)) |
15817 | 179 return TRUE; |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
28604
diff
changeset
|
180 |
15817 | 181 if (event == GNT_LEFT_MOUSE_DOWN && widget && widget != wm->_list.window && |
182 !GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_TRANSIENT)) { | |
17698
56d2ae9cbb5c
Initial workspace support. refs #51
Richard Nelson <wabz@pidgin.im>
parents:
16281
diff
changeset
|
183 if (widget != wm->cws->ordered->data) { |
15817 | 184 gnt_wm_raise_window(wm, widget); |
185 } | |
186 if (y == widget->priv.y) { | |
187 offset = x - widget->priv.x; | |
188 remember = widget; | |
189 button = MOUSE_LEFT; | |
190 } | |
191 } else if (event == GNT_MOUSE_UP) { | |
192 if (button == MOUSE_NONE && y == getmaxy(stdscr) - 1) { | |
193 /* Clicked on the taskbar */ | |
17698
56d2ae9cbb5c
Initial workspace support. refs #51
Richard Nelson <wabz@pidgin.im>
parents:
16281
diff
changeset
|
194 int n = g_list_length(wm->cws->list); |
15817 | 195 if (n) { |
196 int width = getmaxx(stdscr) / n; | |
197 gnt_bindable_perform_action_named(GNT_BINDABLE(wm), "switch-window-n", x/width, NULL); | |
198 } | |
199 } else if (button == MOUSE_LEFT && remember) { | |
200 x -= offset; | |
201 if (x < 0) x = 0; | |
202 if (y < 0) y = 0; | |
203 gnt_screen_move_widget(remember, x, y); | |
204 } | |
205 button = MOUSE_NONE; | |
206 remember = NULL; | |
207 offset = 0; | |
208 } | |
209 | |
17053
541c5ed54e90
Fix the commit from earlier today about null-widgets.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17047
diff
changeset
|
210 if (widget) |
541c5ed54e90
Fix the commit from earlier today about null-widgets.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17047
diff
changeset
|
211 gnt_widget_clicked(widget, event, x, y); |
15817 | 212 return TRUE; |
213 } | |
214 | |
215 static gboolean | |
216 io_invoke_error(GIOChannel *source, GIOCondition cond, gpointer data) | |
217 { | |
218 int id = GPOINTER_TO_INT(data); | |
219 g_source_remove(id); | |
220 g_io_channel_unref(source); | |
221 | |
222 channel = NULL; | |
223 setup_io(); | |
224 return TRUE; | |
225 } | |
226 | |
227 static gboolean | |
228 io_invoke(GIOChannel *source, GIOCondition cond, gpointer null) | |
229 { | |
230 char keys[256]; | |
22296
6d3f8042f21f
Fix the "Finch doesn't work" bug. More specifically, it turned out to be
Stu Tomlinson <stu@nosnilmot.com>
parents:
22011
diff
changeset
|
231 gssize rd; |
15817 | 232 char *k; |
20309
d256249b22ea
applied changes from 4bbc209c8076ef89135700af844ec6bb04602c0a
Luke Schierer <lschiere@pidgin.im>
parents:
20225
diff
changeset
|
233 char *cvrt = NULL; |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
234 |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
235 if (wm->mode == GNT_KP_MODE_WAIT_ON_CHILD) |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
236 return FALSE; |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
237 |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
238 rd = read(STDIN_FILENO, keys + HOLDING_ESCAPE, sizeof(keys) - 1 - HOLDING_ESCAPE); |
15817 | 239 if (rd < 0) |
240 { | |
241 int ch = getch(); /* This should return ERR, but let's see what it really returns */ | |
242 endwin(); | |
243 printf("ERROR: %s\n", strerror(errno)); | |
244 printf("File descriptor is: %d\n\nGIOChannel is: %p\ngetch() = %d\n", STDIN_FILENO, source, ch); | |
245 raise(SIGABRT); | |
246 } | |
247 else if (rd == 0) | |
248 { | |
249 endwin(); | |
250 printf("EOF\n"); | |
251 raise(SIGABRT); | |
252 } | |
253 | |
254 rd += HOLDING_ESCAPE; | |
22713
8d74a9e409f1
Patch from Dylan Simon <dylan@dylex.net> to fix handling escape key
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22296
diff
changeset
|
255 if (HOLDING_ESCAPE) { |
15817 | 256 keys[0] = '\033'; |
22713
8d74a9e409f1
Patch from Dylan Simon <dylan@dylex.net> to fix handling escape key
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22296
diff
changeset
|
257 g_source_remove(escape_stuff.timer); |
8d74a9e409f1
Patch from Dylan Simon <dylan@dylex.net> to fix handling escape key
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22296
diff
changeset
|
258 escape_stuff.timer = 0; |
8d74a9e409f1
Patch from Dylan Simon <dylan@dylex.net> to fix handling escape key
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22296
diff
changeset
|
259 } |
20309
d256249b22ea
applied changes from 4bbc209c8076ef89135700af844ec6bb04602c0a
Luke Schierer <lschiere@pidgin.im>
parents:
20225
diff
changeset
|
260 keys[rd] = 0; |
d256249b22ea
applied changes from 4bbc209c8076ef89135700af844ec6bb04602c0a
Luke Schierer <lschiere@pidgin.im>
parents:
20225
diff
changeset
|
261 gnt_wm_set_event_stack(wm, TRUE); |
d256249b22ea
applied changes from 4bbc209c8076ef89135700af844ec6bb04602c0a
Luke Schierer <lschiere@pidgin.im>
parents:
20225
diff
changeset
|
262 |
d256249b22ea
applied changes from 4bbc209c8076ef89135700af844ec6bb04602c0a
Luke Schierer <lschiere@pidgin.im>
parents:
20225
diff
changeset
|
263 cvrt = g_locale_to_utf8(keys, rd, (gsize*)&rd, NULL, NULL); |
d256249b22ea
applied changes from 4bbc209c8076ef89135700af844ec6bb04602c0a
Luke Schierer <lschiere@pidgin.im>
parents:
20225
diff
changeset
|
264 k = cvrt ? cvrt : keys; |
d256249b22ea
applied changes from 4bbc209c8076ef89135700af844ec6bb04602c0a
Luke Schierer <lschiere@pidgin.im>
parents:
20225
diff
changeset
|
265 if (mouse_enabled && detect_mouse_action(k)) |
d256249b22ea
applied changes from 4bbc209c8076ef89135700af844ec6bb04602c0a
Luke Schierer <lschiere@pidgin.im>
parents:
20225
diff
changeset
|
266 goto end; |
19176
33201366bcd4
Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19171
diff
changeset
|
267 |
33201366bcd4
Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19171
diff
changeset
|
268 #if 0 |
33201366bcd4
Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19171
diff
changeset
|
269 /* I am not sure what's happening here. If this actually does something, |
33201366bcd4
Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19171
diff
changeset
|
270 * then this needs to go in gnt_keys_refine. */ |
33201366bcd4
Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19171
diff
changeset
|
271 if (*k < 0) { /* Alt not sending ESC* */ |
17819
d8b9bea550bc
Added a few lines to gnt_main::io_invoke to deal with ALT not sending ESC.
Eric Polino <aluink@pidgin.im>
parents:
17053
diff
changeset
|
272 *(k + 1) = 128 - *k; |
d8b9bea550bc
Added a few lines to gnt_main::io_invoke to deal with ALT not sending ESC.
Eric Polino <aluink@pidgin.im>
parents:
17053
diff
changeset
|
273 *k = 27; |
d8b9bea550bc
Added a few lines to gnt_main::io_invoke to deal with ALT not sending ESC.
Eric Polino <aluink@pidgin.im>
parents:
17053
diff
changeset
|
274 *(k + 2) = 0; |
d8b9bea550bc
Added a few lines to gnt_main::io_invoke to deal with ALT not sending ESC.
Eric Polino <aluink@pidgin.im>
parents:
17053
diff
changeset
|
275 rd++; |
d8b9bea550bc
Added a few lines to gnt_main::io_invoke to deal with ALT not sending ESC.
Eric Polino <aluink@pidgin.im>
parents:
17053
diff
changeset
|
276 } |
19176
33201366bcd4
Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19171
diff
changeset
|
277 #endif |
33201366bcd4
Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19171
diff
changeset
|
278 |
15817 | 279 while (rd) { |
280 char back; | |
281 int p; | |
282 | |
283 if (k[0] == '\033' && rd == 1) { | |
284 escape_stuff.timer = g_timeout_add(250, escape_timeout, NULL); | |
285 break; | |
286 } | |
287 | |
288 gnt_keys_refine(k); | |
289 p = MAX(1, gnt_keys_find_combination(k)); | |
290 back = k[p]; | |
291 k[p] = '\0'; | |
292 gnt_wm_process_input(wm, k); /* XXX: */ | |
293 k[p] = back; | |
294 rd -= p; | |
295 k += p; | |
296 } | |
16281
82b6fdd899a9
Dialogs opened resulting from a mouse-click should fain focus.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
297 end: |
21283
406aa3be6b32
Minor adjustments to prevent a crash, correct a data type and fix drawing.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21253
diff
changeset
|
298 if (wm) |
406aa3be6b32
Minor adjustments to prevent a crash, correct a data type and fix drawing.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21253
diff
changeset
|
299 gnt_wm_set_event_stack(wm, FALSE); |
20309
d256249b22ea
applied changes from 4bbc209c8076ef89135700af844ec6bb04602c0a
Luke Schierer <lschiere@pidgin.im>
parents:
20225
diff
changeset
|
300 g_free(cvrt); |
15817 | 301 return TRUE; |
302 } | |
303 | |
304 static void | |
305 setup_io() | |
306 { | |
307 int result; | |
308 channel = g_io_channel_unix_new(STDIN_FILENO); | |
309 g_io_channel_set_close_on_unref(channel, TRUE); | |
310 | |
311 #if 0 | |
312 g_io_channel_set_encoding(channel, NULL, NULL); | |
313 g_io_channel_set_buffered(channel, FALSE); | |
314 g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, NULL ); | |
315 #endif | |
316 | |
18425
84d318eadc62
The input was causing some weird issues. This fixes it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18421
diff
changeset
|
317 channel_read_callback = result = g_io_add_watch_full(channel, G_PRIORITY_HIGH, |
15817 | 318 (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI), |
319 io_invoke, NULL, NULL); | |
28142
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
320 |
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
321 channel_error_callback = g_io_add_watch_full(channel, G_PRIORITY_HIGH, |
15817 | 322 (G_IO_NVAL), |
323 io_invoke_error, GINT_TO_POINTER(result), NULL); | |
28142
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
324 |
15817 | 325 g_io_channel_unref(channel); /* Apparently this caused crashes for some people. |
326 But irssi does this, so I am going to assume the | |
327 crashes were caused by some other stuff. */ | |
328 | |
24558
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22713
diff
changeset
|
329 gnt_warning("setting up IO (%d)", channel_read_callback); |
15817 | 330 } |
331 | |
332 static gboolean | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21720
diff
changeset
|
333 refresh_screen(void) |
15817 | 334 { |
335 gnt_bindable_perform_action_named(GNT_BINDABLE(wm), "refresh-screen", NULL); | |
336 return FALSE; | |
337 } | |
338 | |
339 /* Xerox */ | |
340 static void | |
341 clean_pid(void) | |
342 { | |
343 int status; | |
344 pid_t pid; | |
345 | |
346 do { | |
347 pid = waitpid(-1, &status, WNOHANG); | |
348 } while (pid != 0 && pid != (pid_t)-1); | |
349 | |
350 if ((pid == (pid_t) - 1) && (errno != ECHILD)) { | |
351 char errmsg[BUFSIZ]; | |
352 g_snprintf(errmsg, BUFSIZ, "Warning: waitpid() returned %d", pid); | |
353 perror(errmsg); | |
354 } | |
355 } | |
356 | |
357 static void | |
16888
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
358 exit_confirmed(gpointer null) |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
359 { |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
360 gnt_bindable_perform_action_named(GNT_BINDABLE(wm), "wm-quit", NULL); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
361 } |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
362 |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
363 static void |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
364 exit_win_close(GntWidget *w, GntWidget **win) |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
365 { |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
366 *win = NULL; |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
367 } |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
368 |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
369 static void |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21720
diff
changeset
|
370 ask_before_exit(void) |
16888
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
371 { |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
372 static GntWidget *win = NULL; |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
373 GntWidget *bbox, *button; |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
374 |
18439
ec80e921818c
Hide the menu when ctrl-c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18425
diff
changeset
|
375 if (wm->menu) { |
ec80e921818c
Hide the menu when ctrl-c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18425
diff
changeset
|
376 do { |
ec80e921818c
Hide the menu when ctrl-c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18425
diff
changeset
|
377 gnt_widget_hide(GNT_WIDGET(wm->menu)); |
ec80e921818c
Hide the menu when ctrl-c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18425
diff
changeset
|
378 if (wm->menu) |
ec80e921818c
Hide the menu when ctrl-c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18425
diff
changeset
|
379 wm->menu = wm->menu->parentmenu; |
ec80e921818c
Hide the menu when ctrl-c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18425
diff
changeset
|
380 } while (wm->menu); |
ec80e921818c
Hide the menu when ctrl-c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18425
diff
changeset
|
381 } |
ec80e921818c
Hide the menu when ctrl-c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18425
diff
changeset
|
382 |
16888
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
383 if (win) |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
384 goto raise; |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
385 |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
386 win = gnt_vwindow_new(FALSE); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
387 gnt_box_add_widget(GNT_BOX(win), gnt_label_new("Are you sure you want to quit?")); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
388 gnt_box_set_title(GNT_BOX(win), "Quit?"); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
389 gnt_box_set_alignment(GNT_BOX(win), GNT_ALIGN_MID); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
390 g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(exit_win_close), &win); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
391 |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
392 bbox = gnt_hbox_new(FALSE); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
393 gnt_box_add_widget(GNT_BOX(win), bbox); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
394 |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
395 button = gnt_button_new("Quit"); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
396 g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(exit_confirmed), NULL); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
397 gnt_box_add_widget(GNT_BOX(bbox), button); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
398 |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
399 button = gnt_button_new("Cancel"); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
400 g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), win); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
401 gnt_box_add_widget(GNT_BOX(bbox), button); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
402 |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
403 gnt_widget_show(win); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
404 raise: |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
405 gnt_wm_raise_window(wm, win); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
406 } |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
407 |
17047
a19b8d71f868
Do not process clicks on no widget.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16888
diff
changeset
|
408 #ifdef SIGWINCH |
a19b8d71f868
Do not process clicks on no widget.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16888
diff
changeset
|
409 static void (*org_winch_handler)(int); |
a19b8d71f868
Do not process clicks on no widget.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16888
diff
changeset
|
410 #endif |
a19b8d71f868
Do not process clicks on no widget.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16888
diff
changeset
|
411 |
16888
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
412 static void |
15817 | 413 sighandler(int sig) |
414 { | |
415 switch (sig) { | |
416 #ifdef SIGWINCH | |
417 case SIGWINCH: | |
17745
8d3c28521112
I think this fixes #532.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17053
diff
changeset
|
418 erase(); |
22011
76e0463db3aa
Squash some compiler warnings, some from my -Wstrict-prototypes fixing.
Richard Laager <rlaager@wiktel.com>
parents:
22007
diff
changeset
|
419 g_idle_add((GSourceFunc)refresh_screen, NULL); |
20225
3c415481a943
applied changes from 388507622896337fe56945f851e3aabee3c0427f
Richard Laager <rlaager@wiktel.com>
parents:
19681
diff
changeset
|
420 if (org_winch_handler) |
3c415481a943
applied changes from 388507622896337fe56945f851e3aabee3c0427f
Richard Laager <rlaager@wiktel.com>
parents:
19681
diff
changeset
|
421 org_winch_handler(sig); |
15817 | 422 signal(SIGWINCH, sighandler); |
423 break; | |
424 #endif | |
425 case SIGCHLD: | |
426 clean_pid(); | |
427 signal(SIGCHLD, sighandler); | |
428 break; | |
16888
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
429 case SIGINT: |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
430 ask_before_exit(); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
431 signal(SIGINT, sighandler); |
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
432 break; |
15817 | 433 } |
434 } | |
435 | |
436 static void | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21720
diff
changeset
|
437 init_wm(void) |
15817 | 438 { |
439 const char *name = gnt_style_get(GNT_STYLE_WM); | |
440 gpointer handle; | |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
28604
diff
changeset
|
441 |
15817 | 442 if (name && *name) { |
443 handle = g_module_open(name, G_MODULE_BIND_LAZY); | |
444 if (handle) { | |
445 gboolean (*init)(GntWM **); | |
446 if (g_module_symbol(handle, "gntwm_init", (gpointer)&init)) { | |
447 init(&wm); | |
448 } | |
449 } | |
450 } | |
451 if (wm == NULL) | |
452 wm = g_object_new(GNT_TYPE_WM, NULL); | |
453 } | |
454 | |
455 void gnt_init() | |
456 { | |
457 char *filename; | |
458 const char *locale; | |
459 | |
460 if (channel) | |
461 return; | |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
28604
diff
changeset
|
462 |
15817 | 463 locale = setlocale(LC_ALL, ""); |
464 | |
465 setup_io(); | |
466 | |
18199
1bb3b07a6879
Detect wide character non-support at compile time, if possible.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18070
diff
changeset
|
467 #ifdef NO_WIDECHAR |
1bb3b07a6879
Detect wide character non-support at compile time, if possible.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18070
diff
changeset
|
468 ascii_only = TRUE; |
1bb3b07a6879
Detect wide character non-support at compile time, if possible.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18070
diff
changeset
|
469 #else |
28604
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
470 if (locale && (strstr(locale, "UTF") || strstr(locale, "utf"))) { |
15817 | 471 ascii_only = FALSE; |
28604
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
472 } else { |
15817 | 473 ascii_only = TRUE; |
28604
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
474 gnt_need_conversation_to_locale = TRUE; |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
475 } |
18199
1bb3b07a6879
Detect wide character non-support at compile time, if possible.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18070
diff
changeset
|
476 #endif |
15817 | 477 |
478 initscr(); | |
479 typeahead(-1); | |
480 noecho(); | |
481 curs_set(0); | |
482 | |
483 gnt_init_keys(); | |
484 gnt_init_styles(); | |
485 | |
486 filename = g_build_filename(g_get_home_dir(), ".gntrc", NULL); | |
487 gnt_style_read_configure_file(filename); | |
488 g_free(filename); | |
489 | |
490 gnt_init_colors(); | |
491 | |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20309
diff
changeset
|
492 wbkgdset(stdscr, '\0' | gnt_color_pair(GNT_COLOR_NORMAL)); |
15817 | 493 refresh(); |
494 | |
495 #ifdef ALL_MOUSE_EVENTS | |
496 if ((mouse_enabled = gnt_style_get_bool(GNT_STYLE_MOUSE, FALSE))) | |
497 mousemask(ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, NULL); | |
498 #endif | |
499 | |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20309
diff
changeset
|
500 wbkgdset(stdscr, '\0' | gnt_color_pair(GNT_COLOR_NORMAL)); |
15817 | 501 werase(stdscr); |
502 wrefresh(stdscr); | |
503 | |
504 #ifdef SIGWINCH | |
17047
a19b8d71f868
Do not process clicks on no widget.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16888
diff
changeset
|
505 org_winch_handler = signal(SIGWINCH, sighandler); |
15817 | 506 #endif |
507 signal(SIGCHLD, sighandler); | |
16888
d2904afe89e2
Ask before exiting when ctrl+c is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
508 signal(SIGINT, sighandler); |
15817 | 509 signal(SIGPIPE, SIG_IGN); |
510 | |
511 g_type_init(); | |
512 | |
513 init_wm(); | |
514 | |
515 clipboard = g_object_new(GNT_TYPE_CLIPBOARD, NULL); | |
516 } | |
517 | |
518 void gnt_main() | |
519 { | |
520 wm->loop = g_main_loop_new(NULL, FALSE); | |
521 g_main_loop_run(wm->loop); | |
522 } | |
523 | |
524 /********************************* | |
525 * Stuff for 'window management' * | |
526 *********************************/ | |
527 | |
18344
310bad6dafe4
Allow raising window only from an event-stack, otherwise set the urgent flag.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18199
diff
changeset
|
528 void gnt_window_present(GntWidget *window) |
310bad6dafe4
Allow raising window only from an event-stack, otherwise set the urgent flag.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18199
diff
changeset
|
529 { |
310bad6dafe4
Allow raising window only from an event-stack, otherwise set the urgent flag.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18199
diff
changeset
|
530 if (wm->event_stack) |
310bad6dafe4
Allow raising window only from an event-stack, otherwise set the urgent flag.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18199
diff
changeset
|
531 gnt_wm_raise_window(wm, window); |
310bad6dafe4
Allow raising window only from an event-stack, otherwise set the urgent flag.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18199
diff
changeset
|
532 else |
310bad6dafe4
Allow raising window only from an event-stack, otherwise set the urgent flag.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18199
diff
changeset
|
533 gnt_widget_set_urgent(window); |
18070 | 534 } |
535 | |
15817 | 536 void gnt_screen_occupy(GntWidget *widget) |
537 { | |
538 gnt_wm_new_window(wm, widget); | |
539 } | |
540 | |
541 void gnt_screen_release(GntWidget *widget) | |
542 { | |
18716
0873698f8cce
This fixes a few weird crashes in pygnt.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18526
diff
changeset
|
543 if (wm) |
0873698f8cce
This fixes a few weird crashes in pygnt.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18526
diff
changeset
|
544 gnt_wm_window_close(wm, widget); |
15817 | 545 } |
546 | |
547 void gnt_screen_update(GntWidget *widget) | |
548 { | |
549 gnt_wm_update_window(wm, widget); | |
550 } | |
551 | |
552 gboolean gnt_widget_has_focus(GntWidget *widget) | |
553 { | |
554 GntWidget *w; | |
555 if (!widget) | |
556 return FALSE; | |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
28604
diff
changeset
|
557 |
15817 | 558 if (GNT_IS_MENU(widget)) |
559 return TRUE; | |
560 | |
561 w = widget; | |
562 | |
563 while (widget->parent) | |
564 widget = widget->parent; | |
565 | |
566 if (widget == wm->_list.window) | |
567 return TRUE; | |
17698
56d2ae9cbb5c
Initial workspace support. refs #51
Richard Nelson <wabz@pidgin.im>
parents:
16281
diff
changeset
|
568 if (wm->cws->ordered && wm->cws->ordered->data == widget) { |
15817 | 569 if (GNT_IS_BOX(widget) && |
570 (GNT_BOX(widget)->active == w || widget == w)) | |
571 return TRUE; | |
572 } | |
573 return FALSE; | |
574 } | |
575 | |
576 void gnt_widget_set_urgent(GntWidget *widget) | |
577 { | |
578 while (widget->parent) | |
579 widget = widget->parent; | |
580 | |
17698
56d2ae9cbb5c
Initial workspace support. refs #51
Richard Nelson <wabz@pidgin.im>
parents:
16281
diff
changeset
|
581 if (wm->cws->ordered && wm->cws->ordered->data == widget) |
15817 | 582 return; |
583 | |
584 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_URGENT); | |
585 | |
586 gnt_wm_update_window(wm, widget); | |
587 } | |
588 | |
589 void gnt_quit() | |
590 { | |
28142
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
591 /* Prevent io_invoke() from being called after wm is destroyed */ |
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
592 g_source_remove(channel_error_callback); |
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
593 g_source_remove(channel_read_callback); |
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
594 |
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
595 channel_error_callback = 0; |
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
596 channel_read_callback = 0; |
de2ac0952487
Remove IO watches at shutdown in gntmain.c Closes #9872.
desowin@gmail.com
parents:
24920
diff
changeset
|
597 |
18716
0873698f8cce
This fixes a few weird crashes in pygnt.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18526
diff
changeset
|
598 g_object_unref(G_OBJECT(wm)); |
0873698f8cce
This fixes a few weird crashes in pygnt.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18526
diff
changeset
|
599 wm = NULL; |
0873698f8cce
This fixes a few weird crashes in pygnt.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18526
diff
changeset
|
600 |
15817 | 601 update_panels(); |
602 doupdate(); | |
603 gnt_uninit_colors(); | |
604 gnt_uninit_styles(); | |
605 endwin(); | |
606 } | |
607 | |
608 gboolean gnt_ascii_only() | |
609 { | |
610 return ascii_only; | |
611 } | |
612 | |
613 void gnt_screen_resize_widget(GntWidget *widget, int width, int height) | |
614 { | |
615 gnt_wm_resize_window(wm, widget, width, height); | |
616 } | |
617 | |
618 void gnt_screen_move_widget(GntWidget *widget, int x, int y) | |
619 { | |
620 gnt_wm_move_window(wm, widget, x, y); | |
621 } | |
622 | |
623 void gnt_screen_rename_widget(GntWidget *widget, const char *text) | |
624 { | |
625 gnt_box_set_title(GNT_BOX(widget), text); | |
626 gnt_widget_draw(widget); | |
627 gnt_wm_update_window(wm, widget); | |
628 } | |
629 | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21720
diff
changeset
|
630 void gnt_register_action(const char *label, void (*callback)(void)) |
15817 | 631 { |
632 GntAction *action = g_new0(GntAction, 1); | |
633 action->label = g_strdup(label); | |
634 action->callback = callback; | |
635 | |
636 wm->acts = g_list_append(wm->acts, action); | |
637 } | |
638 | |
639 static void | |
640 reset_menu(GntWidget *widget, gpointer null) | |
641 { | |
642 wm->menu = NULL; | |
643 } | |
644 | |
645 gboolean gnt_screen_menu_show(gpointer newmenu) | |
646 { | |
647 if (wm->menu) { | |
648 /* For now, if a menu is being displayed, then another menu | |
649 * can NOT take over. */ | |
650 return FALSE; | |
651 } | |
652 | |
653 wm->menu = newmenu; | |
654 GNT_WIDGET_UNSET_FLAGS(GNT_WIDGET(wm->menu), GNT_WIDGET_INVISIBLE); | |
655 gnt_widget_draw(GNT_WIDGET(wm->menu)); | |
656 | |
657 g_signal_connect(G_OBJECT(wm->menu), "hide", G_CALLBACK(reset_menu), NULL); | |
16781
d0f9b2b217cf
Fix context menu unusualness in the buddylist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16281
diff
changeset
|
658 g_signal_connect(G_OBJECT(wm->menu), "destroy", G_CALLBACK(reset_menu), NULL); |
15817 | 659 |
660 return TRUE; | |
661 } | |
662 | |
21161
e119edfc0fb0
applied changes from 172a59b41412c4630834d66f2e7ec3be970cc36b
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20309
diff
changeset
|
663 void gnt_set_clipboard_string(const gchar *string) |
15817 | 664 { |
665 gnt_clipboard_set_string(clipboard, string); | |
666 } | |
667 | |
668 GntClipboard *gnt_get_clipboard() | |
669 { | |
670 return clipboard; | |
671 } | |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
672 |
15817 | 673 gchar *gnt_get_clipboard_string() |
674 { | |
675 return gnt_clipboard_get_string(clipboard); | |
676 } | |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
677 |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
678 #if GLIB_CHECK_VERSION(2,4,0) |
18526
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
679 typedef struct |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
680 { |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
681 void (*callback)(int status, gpointer data); |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
682 gpointer data; |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
683 } ChildProcess; |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
684 |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
685 static void |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
686 reap_child(GPid pid, gint status, gpointer data) |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
687 { |
18526
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
688 ChildProcess *cp = data; |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
689 if (cp->callback) { |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
690 cp->callback(status, cp->data); |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
691 } |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
692 g_free(cp); |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
693 clean_pid(); |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
694 wm->mode = GNT_KP_MODE_NORMAL; |
21720
ea56d9386081
Restore the screen properly after the child process ends.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21668
diff
changeset
|
695 endwin(); |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
696 setup_io(); |
21720
ea56d9386081
Restore the screen properly after the child process ends.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21668
diff
changeset
|
697 refresh(); |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
698 refresh_screen(); |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
699 } |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
700 #endif |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
701 |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
702 gboolean gnt_giveup_console(const char *wd, char **argv, char **envp, |
18526
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
703 gint *stin, gint *stout, gint *sterr, |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
704 void (*callback)(int status, gpointer data), gpointer data) |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
705 { |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
706 #if GLIB_CHECK_VERSION(2,4,0) |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
707 GPid pid = 0; |
18526
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
708 ChildProcess *cp = NULL; |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
709 |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
710 if (!g_spawn_async_with_pipes(wd, argv, envp, |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
711 G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
712 (GSpawnChildSetupFunc)endwin, NULL, |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
713 &pid, stin, stout, sterr, NULL)) |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
714 return FALSE; |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
715 |
18526
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
716 cp = g_new0(ChildProcess, 1); |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
717 cp->callback = callback; |
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
718 cp->data = data; |
18425
84d318eadc62
The input was causing some weird issues. This fixes it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18421
diff
changeset
|
719 g_source_remove(channel_read_callback); |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
720 wm->mode = GNT_KP_MODE_WAIT_ON_CHILD; |
18526
09db6fec9dce
Allow having a callback after the child process terminates. Use the callback
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18439
diff
changeset
|
721 g_child_watch_add(pid, reap_child, cp); |
18421
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
722 |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
723 return TRUE; |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
724 #else |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
725 return FALSE; |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
726 #endif |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
727 } |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
728 |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
729 gboolean gnt_is_refugee() |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
730 { |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
731 #if GLIB_CHECK_VERSION(2,4,0) |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
732 return (wm && wm->mode == GNT_KP_MODE_WAIT_ON_CHILD); |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
733 #else |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
734 return FALSE; |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
735 #endif |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
736 } |
e16d097c5739
Allow executing another application (eg. PAGER) that will use the same
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18344
diff
changeset
|
737 |
28604
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
738 const char *C_(const char *x) |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
739 { |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
740 static char *c = NULL; |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
741 if (gnt_need_conversation_to_locale) { |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
742 GError *error = NULL; |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
743 g_free(c); |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
744 c = g_locale_from_utf8(x, -1, NULL, NULL, &error); |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
745 if (c == NULL || error) { |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
746 char *store = c; |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
747 c = NULL; |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
748 gnt_warning("Error: %s\n", error ? error->message : "(unknown)"); |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
749 g_error_free(error); |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
750 error = NULL; |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
751 g_free(c); |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
752 c = store; |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
753 } |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
754 return c ? c : x; |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
755 } else |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
756 return x; |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
757 } |
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28142
diff
changeset
|
758 |