remote nc: fix finding empty window with path comparison
[nedit-bw.git] / release-client.patch
blob6d0b5ddce21e7a4cb94c477c13a561f56a313ebb
1 ---
3 source/built-ins.h | 1 +
4 source/highlightData.c | 4 ++--
5 source/macro.c | 15 +++++++++++++++
6 source/menu.c | 31 ++++++++++++++++++++++++++++++-
7 source/nc.c | 14 ++++++++------
8 source/nedit.h | 1 +
9 source/server.c | 25 ++++++++++---------------
10 source/server_common.c | 5 ++---
11 source/server_common.h | 3 +--
12 source/window.c | 22 +++++++++++++++-------
13 source/windowTitle.c | 11 +++++++++++
14 source/windowTitle.h | 1 +
15 12 files changed, 97 insertions(+), 36 deletions(-)
17 diff --quilt old/source/menu.c new/source/menu.c
18 --- old/source/menu.c
19 +++ new/source/menu.c
20 @@ -56,6 +56,7 @@ static const char CVSID[] = "$Id: menu.c
21 #include "regularExp.h"
22 #include "hooks.h"
23 #include "tabDragDrop.h"
24 +#include "server.h"
25 #include "../util/getfiles.h"
26 #include "../util/DialogF.h"
27 #include "../util/misc.h"
28 @@ -440,6 +441,8 @@ static void setFontsAP(Widget w, XEvent
29 Cardinal *nArgs);
30 static void setLanguageModeAP(Widget w, XEvent *event, String *args,
31 Cardinal *nArgs);
32 +static void releaseClientAP(Widget w, XEvent *event, String *args,
33 + Cardinal *nArgs);
34 #ifdef SGI_CUSTOM
35 static void shortMenusCB(Widget w, WindowInfo *window, caddr_t callData);
36 static void addToToggleShortList(Widget w);
37 @@ -608,7 +611,8 @@ static XtActionsRec Actions[] = {
38 {"set_use_tabs", setUseTabsAP},
39 {"set_fonts", setFontsAP},
40 {"begin_tab_drag", beginTabDragAP},
41 - {"set_language_mode", setLanguageModeAP}
42 + {"set_language_mode", setLanguageModeAP},
43 + {"release_client", releaseClientAP}
46 /* List of previously opened files for File menu */
47 @@ -1302,6 +1306,12 @@ Widget CreateMenuBar(Widget parent, Wind
48 btn = createMenuSeparator(menuPane, "sep1", SHORT);
49 XtVaSetValues(btn, XmNuserData, PERMANENT_MENU_ITEM, NULL);
51 + window->releaseClientItem = createMenuItem(menuPane, "releaseClient",
52 + "Release Client", 'R', doActionCB, "release_client", SHORT);
53 + XtSetSensitive(window->releaseClientItem, False);
54 + btn = createMenuSeparator(menuPane, "sep2", SHORT);
55 + XtVaSetValues(btn, XmNuserData, PERMANENT_MENU_ITEM, NULL);
57 /*
58 ** Create "Help" pull down menu.
60 @@ -4557,6 +4567,25 @@ static void setLanguageModeAP(Widget w,
64 +static void releaseClientAP(Widget w, XEvent *event, String *args,
65 + Cardinal *nArgs)
67 + WindowInfo *window = WidgetToWindow(w);
69 + if (*nArgs != 0) {
70 + fprintf(stderr, "nedit: invalid number of arguments for release_client\n");
71 + return;
72 + }
74 + if (!IsServer)
75 + return;
77 + DeleteFileClosedProperty(window);
78 + XtSetSensitive(window->releaseClientItem, window->fileClosedAtom != None);
79 + UpdateWindowTitle(window);
80 + RefreshTabState(window);
84 ** Same as AddSubMenu from libNUtil.a but 1) mnemonic is optional (NEdit
85 ** users like to be able to re-arrange the mnemonics so they can set Alt
86 diff --quilt old/source/nedit.h new/source/nedit.h
87 --- old/source/nedit.h
88 +++ new/source/nedit.h
89 @@ -455,6 +455,7 @@ typedef struct _WindowInfo {
90 Widget closePaneItem;
91 Widget detachDocumentItem;
92 Widget moveDocumentItem;
93 + Widget releaseClientItem;
94 Widget contextMoveDocumentItem;
95 Widget contextDetachDocumentItem;
96 Widget bgMenuUndoItem;
97 diff --quilt old/source/server.c new/source/server.c
98 --- old/source/server.c
99 +++ new/source/server.c
100 @@ -250,9 +250,7 @@ static Atom findFileClosedProperty(const
102 if (!IsServer) return(None);
104 - atom = CreateServerFileClosedAtom(GetPrefServerName(),
105 - fullname,
106 - True); /* don't create */
107 + atom = CreateServerFileClosedAtom(GetPrefServerName(), fullname);
108 return(atom);
111 @@ -262,6 +260,9 @@ static void getFileClosedProperty(Window
112 if (window->filenameSet) {
113 window->fileClosedAtom = findFileClosedProperty(fullname);
115 + XtSetSensitive(window->releaseClientItem, window->fileClosedAtom != None);
116 + UpdateWindowTitle(window);
117 + RefreshTabState(window);
120 /* Delete the 'FileClosed' atom to inform nc that this file has
121 @@ -335,6 +336,7 @@ static void processServerCommandString(c
122 int editFlags, stringLen = strlen(string);
123 int lineNum, createFlag, readFlag, iconicFlag, lastIconic = 0, tabbed = -1;
124 int fileLen, doLen, lmLen, geomLen, charsRead, itemsRead;
125 + int clientWaits;
126 WindowInfo *window, *lastFile = NULL;
127 long currentDesktop = QueryCurrentDesktop(TheDisplay,
128 RootWindow(TheDisplay, DefaultScreen(TheDisplay)));
129 @@ -374,18 +376,10 @@ static void processServerCommandString(c
130 command both followed by newlines. This bit of code reads the
131 header, and converts the newlines following the filename and do
132 command to nulls to terminate the filename and doCommand strings */
133 - itemsRead = sscanf(inPtr, "%d %d %d %d %d %ld %d %d %d %d%n", &lineNum,
134 + itemsRead = sscanf(inPtr, "%d %d %d %d %d %ld %d %d %d %d %d%n", &lineNum,
135 &readFlag, &createFlag, &iconicFlag, &tabbed, &currentDesktop,
136 - &fileLen, &doLen, &lmLen, &geomLen, &charsRead);
137 - if (itemsRead == 9) {
138 - /* backward compatibility, without currentDesktop */
139 - geomLen = lmLen;
140 - lmLen = doLen;
141 - doLen = fileLen;
142 - fileLen = currentDesktop;
143 - currentDesktop = QueryCurrentDesktop(TheDisplay,
144 - RootWindow(TheDisplay, DefaultScreen(TheDisplay)));
145 - } else if (itemsRead != 10)
146 + &clientWaits, &fileLen, &doLen, &lmLen, &geomLen, &charsRead);
147 + if (itemsRead != 11)
148 goto readError;
149 inPtr += charsRead + 1;
150 if (fileLen >= 0 && inPtr - string + fileLen > stringLen)
151 @@ -508,7 +502,8 @@ static void processServerCommandString(c
152 command can do anything, including closing the window!) */
153 if (window != NULL) {
154 deleteFileOpenProperty(window, requestname);
155 - getFileClosedProperty(window, requestname);
156 + if (clientWaits)
157 + getFileClosedProperty(window, requestname);
159 if (lineNum > 0)
160 SelectNumberedLine(window, lineNum);
161 diff --quilt old/source/window.c new/source/window.c
162 --- old/source/window.c
163 +++ new/source/window.c
164 @@ -2184,16 +2184,19 @@ void UpdateWindowTitle(const WindowInfo
165 window->lockReasons,
166 window->fileChanged,
167 window->transient,
168 + window->fileClosedAtom != None,
169 format);
171 if (strcmp(title, format) == 0)
172 filename = title;
174 - iconTitle = XtMalloc(strlen(filename) + 2); /* strlen("*")+1 */
175 + iconTitle = XtMalloc(strlen(filename) + 3); /* strlen("*?")+1 */
177 strcpy(iconTitle, filename);
178 if (window->fileChanged && !window->transient)
179 strcat(iconTitle, "*");
180 + if (window->fileClosedAtom != None)
181 + strcat(iconTitle, "?");
182 XtVaSetValues(window->shell, XmNtitle, title, XmNiconName, iconTitle, NULL);
184 /* If there's a find or replace dialog up in "Keep Up" mode, with a
185 @@ -3812,22 +3815,23 @@ int getTabPosition(Widget tab)
186 void RefreshTabState(WindowInfo *win)
188 XmString s1, tipString;
189 - char labelString[MAXPATHLEN];
190 + char labelString[MAXPATHLEN+3];
191 char *tag = XmFONTLIST_DEFAULT_TAG;
192 unsigned char alignment;
193 - const char *star = (win->fileChanged && !win->transient) ? "*" : "";
194 + const char *changed = (win->fileChanged && !win->transient) ? "*" : "";
195 + const char *waiting = (win->fileClosedAtom != None) ? "?" : "";
197 /* Set tab label to document's filename. Position of
198 "*" (modified) will change per label alignment setting */
199 XtVaGetValues(win->tab, XmNalignment, &alignment, NULL);
200 if (alignment != XmALIGNMENT_END) {
201 - sprintf(labelString, "%s%s",
202 - star,
203 + sprintf(labelString, "%s%s%s",
204 + waiting, changed,
205 win->filename);
206 } else {
207 - sprintf(labelString, "%s%s",
208 + sprintf(labelString, "%s%s%s",
209 win->filename,
210 - star);
211 + changed, waiting);
214 /* Make the top document stand out a little more */
215 @@ -3990,6 +3994,10 @@ void RefreshMenuToggleStates(WindowInfo
216 if (win->shell != window->shell)
217 break;
218 XtSetSensitive(window->moveDocumentItem, win != NULL);
220 + if (IsServer)
221 + XtSetSensitive(window->releaseClientItem,
222 + window->fileClosedAtom != None);
226 diff --quilt old/source/built-ins.h new/source/built-ins.h
227 --- old/source/built-ins.h
228 +++ new/source/built-ins.h
229 @@ -134,3 +134,4 @@ MV(VERSION, version)
230 MV(NEDIT_HOME, neditHome)
231 MV(transient, transient)
232 MV(macro_backtrace, macroBacktrace)
233 +MV(client_attached, clientAttached)
234 diff --quilt old/source/highlightData.c new/source/highlightData.c
235 --- old/source/highlightData.c
236 +++ new/source/highlightData.c
237 @@ -554,8 +554,8 @@ static char *DefaultPatternSets[] = {
238 Built-in Misc Vars:\"(?<!\\Y)\\$(?:active_pane|calltip_ID|column|cursor|display_width|empty_array|file_name|file_path|language_mode|line|locked|max_font_width|min_font_width|modified|n_display_lines|n_panes|rangeset_list|read_only|selection_(?:start|end|left|right)|server_name|text_length|top_line|transient|VERSION|NEDIT_HOME)>\":::Identifier::\n\
239 Built-in Pref Vars:\"(?<!\\Y)\\$(?:auto_indent|em_tab_dist|file_format|font_name|font_name_bold|font_name_bold_italic|font_name_italic|highlight_syntax|incremental_backup|incremental_search_line|make_backup_copy|match_syntax_based|overtype_mode|show_line_numbers|show_matching|statistics_line|tab_dist|use_tabs|wrap_margin|wrap_text)>\":::Identifier2::\n\
240 Built-in Special Vars:\"(?<!\\Y)\\$(?:args|[1-9]|list_dialog_button|macro_name|n_args|read_status|search_end|shell_cmd_status|string_dialog_button|sub_sep|macro_backtrace)>\":::String1::\n\
241 - Built-in Subrs:\"<(?:args|append_file|beep|call|calltip|clipboard_to_string|define|dialog|eval|filename_dialog|dict_(?:insert|complete|save|append|is_element)|e_print|escape_literal|focus_window|get_character|get_matching|get_pattern_(by_name|at_pos)|get_range|get_selection|get_style_(by_name|at_pos)|getenv|highlight_calltip_line|kill_calltip|length|list_dialog|max|min|n_args|rangeset_(?:add|create|destroy|get_by_name|includes|info|invert|range|set_color|set_mode|set_name|subtract)|read_file|replace_in_string|replace_range|replace_selection|replace_substring|search|search_string|select|select_rectangle|set_cursor_pos|set_transient|set_window_title|shell_command|split|string_compare|string_dialog|string_to_clipboard|substring|t_print|timer_(?:add|remove)|to_(?:column|line|pos)|tolower|toupper|valid_number|write_file)(?=\\s*\\()\":::Subroutine::\n\
242 - Menu Actions:\"<(?:new(?:_tab|_opposite)?|open|open-dialog|open_dialog|open-selected|open_selected|close|save|save-as|save_as|save-as-dialog|save_as_dialog|revert-to-saved|revert_to_saved|revert_to_saved_dialog|include-file|include_file|include-file-dialog|include_file_dialog|load-macro-file|load_macro_file|load-macro-file-dialog|load_macro_file_dialog|load-tags-file|load_tags_file|load-tags-file-dialog|load_tags_file_dialog|unload_tags_file|load_tips_file|load_tips_file_dialog|unload_tips_file|print|print-selection|print_selection|exit|undo|redo|delete|select-all|select_all|shift-left|shift_left|shift-left-by-tab|shift_left_by_tab|shift-right|shift_right|shift-right-by-tab|shift_right_by_tab|find|find-dialog|find_dialog|find-again|find_again|find-selection|find_selection|find_incremental|start_incremental_find|replace|replace-dialog|replace_dialog|replace-all|replace_all|replace-in-selection|replace_in_selection|replace-again|replace_again|replace_find|replace_find_same|replace_find_again|goto-line-number|goto_line_number|goto-line-number-dialog|goto_line_number_dialog|goto-selected|goto_selected|mark|mark-dialog|mark_dialog|goto-mark|goto_mark|goto-mark-dialog|goto_mark_dialog|match|select_to_matching|goto_matching|find-definition|find_definition|show_tip|split-pane|split_pane|close-pane|close_pane|detach_document(?:_dialog)?|move_document_dialog|(?:next|previous|last)_document|uppercase|lowercase|fill-paragraph|fill_paragraph|control-code-dialog|control_code_dialog|filter-selection-dialog|filter_selection_dialog|filter-selection|filter_selection|execute-command|execute_command|execute-command-dialog|execute_command_dialog|execute-command-line|execute_command_line|shell-menu-command|shell_menu_command|macro-menu-command|macro_menu_command|bg_menu_command|post_window_bg_menu|post_tab_context_menu|beginning-of-selection|beginning_of_selection|end-of-selection|end_of_selection|repeat_macro|repeat_dialog|raise_window|focus_pane|set_statistics_line|set_incremental_search_line|set_show_line_numbers|set_auto_indent|set_wrap_text|set_wrap_margin|set_highlight_syntax|set_make_backup_copy|set_incremental_backup|set_show_matching|set_match_syntax_based|set_overtype_mode|set_locked|set_tab_dist|set_em_tab_dist|set_use_tabs|set_fonts|set_language_mode)(?=\\s*\\()\":::Subroutine::\n\
243 + Built-in Subrs:\"<(?:args|append_file|beep|call|calltip|client_attached|clipboard_to_string|define|dialog|eval|filename_dialog|dict_(?:insert|complete|save|append|is_element)|e_print|escape_literal|focus_window|get_character|get_matching|get_pattern_(by_name|at_pos)|get_range|get_selection|get_style_(by_name|at_pos)|getenv|highlight_calltip_line|kill_calltip|length|list_dialog|max|min|n_args|rangeset_(?:add|create|destroy|get_by_name|includes|info|invert|range|set_color|set_mode|set_name|subtract)|read_file|replace_in_string|replace_range|replace_selection|replace_substring|search|search_string|select|select_rectangle|set_cursor_pos|set_transient|set_window_title|shell_command|split|string_compare|string_dialog|string_to_clipboard|substring|t_print|timer_(?:add|remove)|to_(?:column|line|pos)|tolower|toupper|valid_number|write_file)(?=\\s*\\()\":::Subroutine::\n\
244 + Menu Actions:\"<(?:new(?:_tab|_opposite)?|open|open-dialog|open_dialog|open-selected|open_selected|close|save|save-as|save_as|save-as-dialog|save_as_dialog|revert-to-saved|revert_to_saved|revert_to_saved_dialog|include-file|include_file|include-file-dialog|include_file_dialog|load-macro-file|load_macro_file|load-macro-file-dialog|load_macro_file_dialog|load-tags-file|load_tags_file|load-tags-file-dialog|load_tags_file_dialog|unload_tags_file|load_tips_file|load_tips_file_dialog|unload_tips_file|print|print-selection|print_selection|exit|undo|redo|delete|select-all|select_all|shift-left|shift_left|shift-left-by-tab|shift_left_by_tab|shift-right|shift_right|shift-right-by-tab|shift_right_by_tab|find|find-dialog|find_dialog|find-again|find_again|find-selection|find_selection|find_incremental|start_incremental_find|replace|replace-dialog|replace_dialog|replace-all|replace_all|replace-in-selection|replace_in_selection|replace-again|replace_again|replace_find|replace_find_same|replace_find_again|goto-line-number|goto_line_number|goto-line-number-dialog|goto_line_number_dialog|goto-selected|goto_selected|mark|mark-dialog|mark_dialog|goto-mark|goto_mark|goto-mark-dialog|goto_mark_dialog|match|select_to_matching|goto_matching|find-definition|find_definition|show_tip|split-pane|split_pane|close-pane|close_pane|detach_document(?:_dialog)?|move_document_dialog|(?:next|previous|last)_document|uppercase|lowercase|fill-paragraph|fill_paragraph|control-code-dialog|control_code_dialog|filter-selection-dialog|filter_selection_dialog|filter-selection|filter_selection|execute-command|execute_command|execute-command-dialog|execute_command_dialog|execute-command-line|execute_command_line|shell-menu-command|shell_menu_command|macro-menu-command|macro_menu_command|bg_menu_command|post_window_bg_menu|post_tab_context_menu|beginning-of-selection|beginning_of_selection|end-of-selection|end_of_selection|repeat_macro|repeat_dialog|raise_window|focus_pane|set_statistics_line|set_incremental_search_line|set_show_line_numbers|set_auto_indent|set_wrap_text|set_wrap_margin|set_highlight_syntax|set_make_backup_copy|set_incremental_backup|set_show_matching|set_match_syntax_based|set_overtype_mode|set_locked|set_tab_dist|set_em_tab_dist|set_use_tabs|set_fonts|set_language_mode|release_client)(?=\\s*\\()\":::Subroutine::\n\
245 Text Actions:\"<(?:self-insert|self_insert|grab-focus|grab_focus|extend-adjust|extend_adjust|extend-start|extend_start|extend-end|extend_end|secondary-adjust|secondary_adjust|secondary-or-drag-adjust|secondary_or_drag_adjust|secondary-start|secondary_start|secondary-or-drag-start|secondary_or_drag_start|process-bdrag|process_bdrag|move-destination|move_destination|move-to|move_to|move-to-or-end-drag|move_to_or_end_drag|end_drag|copy-to|copy_to|copy-to-or-end-drag|copy_to_or_end_drag|exchange|process-cancel|process_cancel|paste-clipboard|paste_clipboard|copy-clipboard|copy_clipboard|cut-clipboard|cut_clipboard|copy-primary|copy_primary|cut-primary|cut_primary|newline|newline-and-indent|newline_and_indent|newline-no-indent|newline_no_indent|delete-selection|delete_selection|delete-previous-character|delete_previous_character|delete-next-character|delete_next_character|delete-previous-word|delete_previous_word|delete-next-word|delete_next_word|delete-to-start-of-line|delete_to_start_of_line|delete-to-end-of-line|delete_to_end_of_line|forward-character|forward_character|backward-character|backward_character|key-select|key_select|process-up|process_up|process-down|process_down|process-shift-up|process_shift_up|process-shift-down|process_shift_down|process-home|process_home|forward-word|forward_word|backward-word|backward_word|forward-paragraph|forward_paragraph|backward-paragraph|backward_paragraph|beginning-of-line|beginning_of_line|end-of-line|end_of_line|beginning-of-file|beginning_of_file|end-of-file|end_of_file|next-page|next_page|previous-page|previous_page|page-left|page_left|page-right|page_right|toggle-overstrike|toggle_overstrike|scroll-up|scroll_up|scroll-down|scroll_down|scroll_left|scroll_right|scroll-to-line|scroll_to_line|select-all|select_all|select_word|deselect-all|deselect_all|focusIn|focusOut|process-return|process_return|process-tab|process_tab|insert-string|insert_string|mouse_pan)(?=\\s*\\()\":::Subroutine::\n\
246 Macro Hooks:\"<(?:(?:pre|post)_(?:open|save)|cursor_moved|modified|(?:losing_)?focus|language_mode)_hook(?=\\s*\\()\":::Subroutine1::\n\
247 Keyword:\"<(?:break|case|continue|default|define|delete|do|else|finally|for|if|in|readonly|return|switch|typeof|while)>\":::Keyword::\n\
248 diff --quilt old/source/macro.c new/source/macro.c
249 --- old/source/macro.c
250 +++ new/source/macro.c
251 @@ -7216,6 +7216,21 @@ static int macroBacktraceMV(WindowInfo *
252 return GetBacktrace(result, errMsg);
255 +static int clientAttachedMV(WindowInfo *window, DataValue *argList,
256 + int nArgs, DataValue *result, char **errMsg)
258 + result->tag = INT_TAG;
259 + result->val.n = 0;
261 + /* if we don't run in server mode, return always false */
262 + if (!IsServer)
263 + return True;
265 + result->val.n = window->fileClosedAtom != None;
267 + return True;
270 static int wrongNArgsErr(char **errMsg)
272 *errMsg = "Wrong number of arguments to function %s";
273 diff --quilt old/source/nc.c new/source/nc.c
274 --- old/source/nc.c
275 +++ new/source/nc.c
276 @@ -228,8 +228,7 @@ static void createWaitProperties(void)
277 fileListHead.waitForCloseCount++;
278 item->waitForFileClosedAtom =
279 CreateServerFileClosedAtom(Preferences.serverName,
280 - item->path,
281 - False);
282 + item->path);
283 setPropertyValue(item->waitForFileClosedAtom);
286 @@ -779,9 +778,10 @@ static void parseCommandLine(int argc, c
289 /* See below for casts */
290 - sprintf(outPtr, "%d %d %d %d %d %ld %ld %ld %ld %ld\n"
291 + sprintf(outPtr, "%d %d %d %d %d %ld %d %ld %ld %ld %ld\n"
292 "%s%s\n%s\n%s\n%s\n%n",
293 lineNum, read, create, iconic, tabbed, currentDesktop,
294 + !!Preferences.waitForClose,
295 filePrefixLen + (long) strlen(path),
296 (long) strlen(toDoCommand), (long) strlen(langMode),
297 (long) strlen(geometry),
298 @@ -824,8 +824,9 @@ static void parseCommandLine(int argc, c
299 The "long" cast on strlen() is necessary because size_t
300 is 64 bit on Alphas, and 32-bit on most others. There is
301 no printf format specifier for "size_t", thanx, ANSI. */
302 - sprintf(outPtr, "%d %d %d %d %d %ld %ld %ld %ld %ld\n%n", lineNum,
303 - read, create, iconic, isTabbed, currentDesktop,
304 + sprintf(outPtr, "%d %d %d %d %d %ld %d %ld %ld %ld %ld\n%n",
305 + lineNum, read, create, iconic, isTabbed,
306 + currentDesktop, !!Preferences.waitForClose,
307 filePrefixLen + (long) strlen(path),
308 (long) strlen(toDoCommand), (long) strlen(langMode),
309 (long) strlen(geometry), &charsWritten);
310 @@ -888,7 +889,7 @@ static void parseCommandLine(int argc, c
311 /* TODO: what about other platforms? */
312 #endif /* VMS */
314 - sprintf(outPtr, "0 0 0 %d %d %ld %ld %ld %ld %ld\n%n", iconic, tabbed,
315 + sprintf(outPtr, "0 0 0 %d %d %ld 0 %ld %ld %ld %ld\n%n", iconic, tabbed,
316 currentDesktop, -(filePrefixLen + length),
317 (long) strlen(toDoCommand), (long) strlen(langMode),
318 (long) strlen(geometry), &charsWritten);
319 @@ -1090,3 +1091,4 @@ static void printNcVersion(void ) {
320 COMPILE_OS, COMPILE_MACHINE, COMPILE_COMPILER,
321 __DATE__, __TIME__);
324 diff --quilt old/source/windowTitle.c new/source/windowTitle.c
325 --- old/source/windowTitle.c
326 +++ new/source/windowTitle.c
327 @@ -193,6 +193,7 @@ static void compressWindowTitle(char *ti
329 /* remove empty paranthesis pairs */
330 case '(':
331 + sourcePtr = removeSequence(sourcePtr, ' ');
332 if (*sourcePtr == ')') {
333 modified = True;
334 sourcePtr++;
335 @@ -202,6 +203,7 @@ static void compressWindowTitle(char *ti
336 break;
338 case '[':
339 + sourcePtr = removeSequence(sourcePtr, ' ');
340 if (*sourcePtr == ']') {
341 modified = True;
342 sourcePtr++;
343 @@ -211,6 +213,7 @@ static void compressWindowTitle(char *ti
344 break;
346 case '{':
347 + sourcePtr = removeSequence(sourcePtr, ' ');
348 if (*sourcePtr == '}') {
349 modified = True;
350 sourcePtr++;
351 @@ -250,6 +253,7 @@ static void compressWindowTitle(char *ti
352 of leading hosts components to dispaly.
353 ** %S : file status
354 ** %u : user name
355 +** %w : "waiting" if a client is waiting for the closure of this document
357 ** if the ClearCase view tag and server name are identical, only the first one
358 ** specified in the formatting string will be displayed.
359 @@ -263,6 +267,7 @@ char *FormatWindowTitle(const char* file
360 int lockReasons,
361 int fileChanged,
362 int transient,
363 + int clientWaits,
364 const char* titleFormat)
366 static char title[WINDOWTITLE_MAX_LEN];
367 @@ -410,6 +415,11 @@ char *FormatWindowTitle(const char* file
368 titlePtr = safeCharAdd(titlePtr, titleEnd, '%');
369 break;
371 + case 'w': /* client is waiting */
372 + if (isServer && clientWaits)
373 + titlePtr = safeStrCpy(titlePtr, titleEnd, "waiting");
374 + break;
376 case '*': /* short file status ? */
377 fileStatusPresent = True;
378 if (*titleFormat && *titleFormat == 'S')
379 @@ -593,6 +603,7 @@ static void formatChangedCB(Widget w, Xt
380 etDialog.lockReasons,
381 XmToggleButtonGetState(etDialog.oFileChangedW),
382 XmToggleButtonGetState(etDialog.oTransientW),
383 + False,
384 format);
385 XtFree(format);
386 XmTextFieldSetString(etDialog.previewW, title);
387 diff --quilt old/source/windowTitle.h new/source/windowTitle.h
388 --- old/source/windowTitle.h
389 +++ new/source/windowTitle.h
390 @@ -43,6 +43,7 @@ char *FormatWindowTitle(const char* file
391 int lockReasons,
392 int fileChanged,
393 int transient,
394 + int clientWaits,
395 const char* titleFormat);
397 void EditCustomTitleFormat(WindowInfo *window);
398 diff --quilt old/source/server_common.c new/source/server_common.c
399 --- old/source/server_common.c
400 +++ new/source/server_common.c
401 @@ -99,8 +99,7 @@ Atom CreateServerFileOpenAtom(const char
404 Atom CreateServerFileClosedAtom(const char *serverName,
405 - const char *path,
406 - Bool only_if_exist)
407 + const char *path)
409 char propName[14+1+MAXNODENAMELEN+1+MAXUSERNAMELEN+1+MAXSERVERNAMELEN+1+MAXPATHLEN+1+9+1];
410 const char *userName = GetUserName(NEDIT_NAME);
411 @@ -108,7 +107,7 @@ Atom CreateServerFileClosedAtom(const ch
412 Atom atom;
414 sprintf(propName, "NEDIT_5.7_FILE_%s_%s_%s_%s_WF_CLOSED", hostName, userName, serverName, path);
415 - atom = XInternAtom(TheDisplay, propName, only_if_exist);
416 + atom = XInternAtom(TheDisplay, propName, False);
417 return(atom);
420 diff --quilt old/source/server_common.h new/source/server_common.h
421 --- old/source/server_common.h
422 +++ new/source/server_common.h
423 @@ -43,8 +43,7 @@ void CreateServerPropertyAtoms(const cha
424 Atom CreateServerFileOpenAtom(const char *serverName,
425 const char *path);
426 Atom CreateServerFileClosedAtom(const char *serverName,
427 - const char *path,
428 - Bool only_if_exists);
429 + const char *path);
430 void DeleteServerFileAtoms(const char* serverName, Window rootWindow);
432 #endif /* NEDIT_SERVER_COMMON_H_INCLUDED */