1
/********************** modified from t2.c *******************/
2
/********************* menu.c ********************************/
36
static int window_resize_callback(GtkWidget *w, GtkAllocation *size, gpointer data);
37
static int section_policy_callback(GtkWidget *w, gpointer data);
38
static int section_select_callback(GtkWidget *w, gpointer data);
39
static int status_bar_callback (GtkWidget *widget, gpointer data);
40
static int search_mode_callback (GtkWidget *widget, gpointer data);
41
static int show_mode_callback(GtkWidget *w, gpointer data);
42
static void app_quit(GtkWidget *w, gpointer data);
43
static void select_row_callback(GtkWidget *, gint, gint, GdkEventButton *, gpointer);
44
static void select_row_callback3(GtkWidget *, gint, gint, GdkEventButton *, gpointer);
45
static void entry_activate_callback(GtkWidget *,gpointer);
46
static void entry_changed_callback(GtkWidget *,gpointer);
47
static void window_help_about_callback (GtkWidget *widget, gpointer data);
48
static void entry4_activate_callback(GtkWidget *,gpointer);
49
static void entry4_changed_callback(GtkWidget *,gpointer);
50
static int button_clicked_callback(GtkWidget *,gpointer);
54
#define MENU_DISPLAY_POSITION 201
55
#define MENU_NEXT_POSITION 202
57
#define _(string) gettext(string)
59
static GtkItemFactoryEntry menu_items[] = {
60
{"/_File", NULL, NULL, 0, "<Branch>"},
61
{"/File/_Quit", "<control>Q", (void (*)())app_quit, 0, NULL},
62
{"/_Sections", NULL, NULL, 0, "<Branch>"},
63
{"/Sections/tearoff1", NULL, NULL, 0, "<Tearoff>" },
64
{"/Sections/_All", NULL, (void (*)())section_policy_callback, 0, "<RadioItem>"},
65
{"/Sections/all _But", NULL, (void (*)())section_policy_callback, 1, "/Sections/All"},
66
{"/Sections/_Only", NULL, (void (*)())section_policy_callback, 2, "/Sections/All"},
67
{"/Sections/sep1", NULL, NULL, 0, "<Separator>"},
68
{"/Sections/_1: User Commands", NULL, (void (*)())section_select_callback, 1<<0, "<CheckItem>"},
69
{"/Sections/_2: System Calls", NULL, (void (*)())section_select_callback, 1<<1, "<CheckItem>"},
70
{"/Sections/_3: Subroutines", NULL, (void (*)())section_select_callback, 1<<2, "<CheckItem>"},
71
{"/Sections/_4: Devices", NULL, (void (*)())section_select_callback, 1<<3, "<CheckItem>"},
72
{"/Sections/_5: File Formats", NULL, (void (*)())section_select_callback, 1<<4, "<CheckItem>"},
73
{"/Sections/_6: Games", NULL, (void (*)())section_select_callback, 1<<5, "<CheckItem>"},
74
{"/Sections/_7: Miscellaneous", NULL, (void (*)())section_select_callback, 1<<6, "<CheckItem>"},
75
{"/Sections/_8: Sys.Administration",NULL, (void (*)())section_select_callback, 1<<7, "<CheckItem>"},
76
{"/Sections/_l: Local", NULL, (void (*)())section_select_callback, 1<<8, "<CheckItem>"},
77
{"/Sections/_n: New", NULL, (void (*)())section_select_callback, 1<<9, "<CheckItem>"},
78
{"/_View", NULL, NULL, 0, "<Branch>"},
79
{"/View/x_Term", "<control>T", (void (*)())show_mode_callback, 0, "<RadioItem>"},
80
{"/View/_GhostView", "<control>G", (void (*)())show_mode_callback, 1, "/View/xTerm"},
81
{"/View/_LocalBrowse", "<control>L", (void (*)())show_mode_callback, 2, "/View/xTerm"},
82
{"/View/_NetBrowse", "<control>N", (void (*)())show_mode_callback, 3, "/View/xTerm"},
83
{"/_Options", NULL, NULL, 0, "<Branch>"},
84
{"/Options/Status bar", NULL, (void (*)())status_bar_callback, 0, "<CheckItem>"},
85
{"/Options/sep1", NULL, NULL, 0, "<Separator>"},
86
{"/Options/_Index search", "<control>I", (void (*)())search_mode_callback, 0, "<RadioItem>"},
87
{"/Options/_Key word search", "<control>K", (void (*)())search_mode_callback, 1, "/Options/Index search"},
88
{"/Options/sep2", NULL, NULL, 0, "<Separator>"},
89
{"/Options/Man _Paths...", NULL, (void (*)())edit_paths_callback, 0, NULL},
90
{"/_Help", NULL, NULL, 0, "<LastBranch>"},
91
{"/_Help/About", NULL, GTK_SIGNAL_FUNC(window_help_about_callback),0,NULL}
94
/********************* init_main_window *************************/
99
GtkWidget * window; //main window
100
GtkTooltips * tooltips;
102
GtkWidget * section_buttons[MAX_MAN_SECTION];
103
GtkWidget * section_select[3];
104
GtkWidget * searching_mode_buttons[2];
105
GtkWidget * show_mode_buttons[4];
106
GtkWidget * status_bar_button;
108
int signal_select_row; //used by select_row_callback() to decide whether to active man pages
109
int signal_entry_change; //used by entry_changed_callback() to decide whether to refresh list
110
int signal_menu_change; //used by menu_item callback to decide whether to take action or not
111
Dictionary * man_paths;
112
char * *man_items_buffer;
114
int clist_selected_row;
115
List * man_paths_to_be_load;
116
const char * keyword;
118
void updata_menu_buttons(int);
120
void get_main_menu(GtkWidget *window, GtkWidget ** menubar) {
121
int nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]);
122
GtkItemFactory *item_factory;
123
GtkAccelGroup *accel_group;
125
accel_group = gtk_accel_group_new();
127
/* This function initializes the item factory.
128
Param 1: The type of menu - can be GTK_TYPE_MENU_BAR, GTK_TYPE_MENU,
129
or GTK_TYPE_OPTION_MENU.
130
Param 2: The path of the menu.
131
Param 3: A pointer to a gtk_accel_group. The item factory sets up
132
the accelerator table while generating menus.
135
item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>",
138
/* This function generates the menu items. Pass the item factory,
139
the number of items in the array, the array itself, and any
140
callback data for the the menu items. */
141
gtk_item_factory_create_items(item_factory, nmenu_items, menu_items, NULL);
143
/* Attach the new accelerator group to the window. */
144
/* gtk_accel_group_attach (accel_group, GTK_OBJECT (window)); */
145
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
148
/* Finally, return the actual menu bar created by the item factory. */
149
*menubar = gtk_item_factory_get_widget(item_factory, "<main>");
150
section_select[0] = gtk_item_factory_get_widget(item_factory, "/Sections/All");
151
section_select[1] = gtk_item_factory_get_widget(item_factory, "/Sections/all But");
152
section_select[2] = gtk_item_factory_get_widget(item_factory, "/Sections/Only");
153
section_buttons[0] = gtk_item_factory_get_widget(item_factory, "/Sections/1: User Commands");
154
section_buttons[1] = gtk_item_factory_get_widget(item_factory, "/Sections/2: System Calls");
155
section_buttons[2] = gtk_item_factory_get_widget(item_factory, "/Sections/3: Subroutines");
156
section_buttons[3] = gtk_item_factory_get_widget(item_factory, "/Sections/4: Devices");
157
section_buttons[4] = gtk_item_factory_get_widget(item_factory, "/Sections/5: File Formats");
158
section_buttons[5] = gtk_item_factory_get_widget(item_factory, "/Sections/6: Games");
159
section_buttons[6] = gtk_item_factory_get_widget(item_factory, "/Sections/7: Miscellaneous");
160
section_buttons[7] = gtk_item_factory_get_widget(item_factory, "/Sections/8: Sys.Administration");
161
section_buttons[8] = gtk_item_factory_get_widget(item_factory, "/Sections/l: Local");
162
section_buttons[9] = gtk_item_factory_get_widget(item_factory, "/Sections/n: New");
163
searching_mode_buttons[0] = gtk_item_factory_get_widget(item_factory, "/Options/Index search");
164
searching_mode_buttons[1] = gtk_item_factory_get_widget(item_factory, "/Options/Key word search");
165
show_mode_buttons[0] = gtk_item_factory_get_widget(item_factory, "/View/xTerm");
166
show_mode_buttons[1] = gtk_item_factory_get_widget(item_factory, "/View/GhostView");
167
show_mode_buttons[2] = gtk_item_factory_get_widget(item_factory, "/View/LocalBrowse");
168
show_mode_buttons[3] = gtk_item_factory_get_widget(item_factory, "/View/NetBrowse");
169
status_bar_button = gtk_item_factory_get_widget(item_factory, "/Options/Status bar");
170
// gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(section_buttons[4]),1);
171
updata_menu_buttons(0);
174
/*flag = 0 means not to invoke call backs when changing the states of buttons.*/
175
void updata_menu_buttons(int flag)
178
k = (long)context->get_value("display_section_policy");
180
if(!((GtkCheckMenuItem*)(section_select[k]))->active){
181
if(!flag) signal_menu_change++;
182
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(section_select[k]),1);
184
k = (long)context->get_value("display_section");
186
if(!(k&(1<<i)) != !(((GtkCheckMenuItem*)(section_buttons[i]))->active)) {
187
if(!flag) signal_menu_change++;
188
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(section_buttons[i]),k&(1<<i));
190
k = (long)context->get_value("searching_mode");
192
if(!(((GtkCheckMenuItem*)(searching_mode_buttons[k]))->active)) {
193
if(!flag) signal_menu_change++;
194
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(searching_mode_buttons[k]),1);
196
k = (long)context->get_value("show_mode");
198
if(!(((GtkCheckMenuItem*)(show_mode_buttons[k]))->active)) {
199
if(!flag) signal_menu_change++;
200
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_mode_buttons[k]),1);
202
k2 = (long)context->get_value("show_status_bar");
204
j = (((GtkCheckMenuItem*)(status_bar_button))->active);
205
if((i&&!j) || (!i&&j)) {
206
if(!flag) signal_menu_change++;
207
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(status_bar_button),i);
209
gtk_widget_hide(status_bar_button);
212
static GtkWidget *index_search_vbox;
213
static GtkWidget *keyword_search_vbox;
214
static GtkWidget *hbox4;
215
static GtkWidget *hbox_status;
216
static GtkWidget *entry4;
217
GtkWidget *search_button;
218
GtkWidget *stop_button;
219
static GtkWidget *statusbar1;
220
static GtkWidget *statusbar2;
222
static void updata_widget_show(int flag)
226
k = (long)context->get_value("searching_mode");
227
k2 = (long)context->get_value("show_status_bar");
230
gtk_widget_show(hbox_status);
232
gtk_widget_hide(hbox_status);
233
gtk_widget_hide(!k?keyword_search_vbox:index_search_vbox);
234
gtk_widget_show(k?keyword_search_vbox:index_search_vbox);
235
if(k2 & (1<<k)) gtk_widget_show (hbox_status);
239
void init_main_window(GtkWidget * window)
241
GtkWidget * main_vbox;
244
GtkWidget * swindow2;
248
gchar *titles[2] = { "Name", "Section" };
249
gchar *titles2[3] = { "Name", "Section", "Description"};
250
signal_select_row = 0;
251
signal_entry_change = 0;
253
tooltips = gtk_tooltips_new();
255
gtk_signal_connect(GTK_OBJECT(window), "destroy",
256
GTK_SIGNAL_FUNC(app_quit),
259
gtk_window_set_title(GTK_WINDOW(window), "Gman");
260
gtk_window_set_policy( GTK_WINDOW( window ), FALSE, TRUE, FALSE );
261
gtk_window_set_default_size(GTK_WINDOW(window),
262
(long)context->get_value("h_size"),
263
(long)context->get_value("v_size"));
265
gtk_widget_set_usize(GTK_WIDGET(window),200,150);
266
main_vbox = gtk_vbox_new(FALSE, 1);
267
gtk_container_border_width(GTK_CONTAINER(main_vbox), 1);
268
gtk_container_add(GTK_CONTAINER(window), main_vbox);
269
gtk_widget_show(main_vbox);
271
get_main_menu(window, &menubar);
272
gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, TRUE, 0);
273
gtk_widget_show(menubar);
275
gtk_signal_connect(GTK_OBJECT(window),"size_allocate",GTK_SIGNAL_FUNC(window_resize_callback),NULL);
277
//keyword_search_vbox
278
keyword_search_vbox = gtk_vbox_new(FALSE,1);
279
gtk_box_pack_start(GTK_BOX(main_vbox), keyword_search_vbox, TRUE, TRUE, 0);
281
hbox4 = gtk_hbox_new (FALSE, 1);
282
gtk_object_set_data (GTK_OBJECT (window), "hbox4", hbox4);
283
gtk_box_pack_start (GTK_BOX (keyword_search_vbox), hbox4, FALSE, TRUE, 0);
284
gtk_widget_show (hbox4);
286
stop_button = gtk_button_new_with_label ("Stop");
287
gtk_object_set_data (GTK_OBJECT (window), "stop_button", stop_button);
288
gtk_widget_set_sensitive(stop_button,0);
289
gtk_signal_connect (GTK_OBJECT(stop_button),"clicked",(GtkSignalFunc)button_clicked_callback,(void*)1);
290
gtk_widget_show (stop_button);
291
gtk_box_pack_start (GTK_BOX (hbox4), stop_button, FALSE, TRUE, 0);
292
gtk_widget_set_usize (stop_button, 40, -2);
294
entry4 = gtk_entry_new ();
295
gtk_object_set_data (GTK_OBJECT (window), "entry4", entry4);
296
gtk_widget_show (entry4);
297
gtk_tooltips_set_tip (tooltips, entry4, "Key word search", NULL);
298
gtk_box_pack_start (GTK_BOX (hbox4), entry4, TRUE, TRUE, 0);
299
gtk_signal_connect(GTK_OBJECT(entry4), "activate",
300
GTK_SIGNAL_FUNC(entry4_activate_callback),NULL);
301
gtk_signal_connect(GTK_OBJECT(entry4), "changed",
302
GTK_SIGNAL_FUNC(entry4_changed_callback),NULL);
304
search_button = gtk_button_new_with_label ("Search");
305
gtk_object_set_data (GTK_OBJECT (window), "search_button", search_button);
306
gtk_widget_set_sensitive(search_button,0);
307
gtk_signal_connect (GTK_OBJECT(stop_button),"clicked",(GtkSignalFunc)button_clicked_callback,(void*)2);
308
gtk_widget_show (search_button);
309
gtk_box_pack_start (GTK_BOX (hbox4), search_button, FALSE, TRUE, 0);
310
gtk_widget_set_usize (search_button, 60, -2);
313
clist3 = gtk_clist_new_with_titles( 3, titles2);
314
swindow2 = gtk_scrolled_window_new (NULL, NULL);
315
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow2),
316
GTK_POLICY_AUTOMATIC,
317
GTK_POLICY_AUTOMATIC);
320
gtk_clist_set_column_width(GTK_CLIST(clist3),0,100);
321
gtk_clist_set_selection_mode(GTK_CLIST(clist3),GTK_SELECTION_SINGLE);
322
gtk_clist_column_titles_passive(GTK_CLIST(clist3));
323
gtk_clist_set_column_auto_resize (GTK_CLIST(clist3),2,1);
325
gtk_container_add (GTK_CONTAINER (swindow2), clist3);
326
gtk_box_pack_start (GTK_BOX (keyword_search_vbox), swindow2, TRUE, TRUE, 0);
327
gtk_widget_show_all(GTK_WIDGET(swindow2));
329
gtk_signal_connect(GTK_OBJECT(clist3),"select_row",
330
GTK_SIGNAL_FUNC(select_row_callback3),NULL);
333
index_search_vbox = gtk_vbox_new(FALSE,1);
334
gtk_box_pack_start(GTK_BOX(main_vbox), index_search_vbox, TRUE, TRUE, 0);
335
entry = gtk_entry_new_with_max_length (50);
336
clist = gtk_clist_new_with_titles( 2, titles);
337
gtk_signal_connect(GTK_OBJECT(entry), "activate",
338
GTK_SIGNAL_FUNC(entry_activate_callback),
340
gtk_signal_connect(GTK_OBJECT(entry), "changed",
341
GTK_SIGNAL_FUNC(entry_changed_callback),
343
gtk_box_pack_start (GTK_BOX (index_search_vbox), entry, FALSE, TRUE, 0);
344
gtk_tooltips_set_tip (tooltips, entry, "index search", NULL);
345
gtk_widget_show(entry);
347
swindow = gtk_scrolled_window_new (NULL, NULL);
348
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
349
GTK_POLICY_AUTOMATIC,
350
GTK_POLICY_AUTOMATIC);
353
gtk_clist_set_column_width(GTK_CLIST(clist),0,200);
354
gtk_clist_set_selection_mode(GTK_CLIST(clist),GTK_SELECTION_SINGLE);
355
gtk_clist_column_titles_passive(GTK_CLIST(clist));
356
gtk_container_add (GTK_CONTAINER (swindow), clist);
357
gtk_box_pack_start (GTK_BOX (index_search_vbox), swindow, TRUE, TRUE, 0);
359
gtk_signal_connect(GTK_OBJECT(clist),"select_row",
360
GTK_SIGNAL_FUNC(select_row_callback),NULL);
363
gtk_widget_grab_focus (focus);
364
gtk_widget_show_all (swindow);
366
hbox_status = gtk_hbox_new (FALSE, 0);
367
gtk_object_set_data (GTK_OBJECT (window), "hbox_status", hbox_status);
368
gtk_box_pack_start (GTK_BOX (main_vbox), hbox_status, FALSE, TRUE, 0);
370
updata_widget_show(0);
372
statusbar1 = gtk_statusbar_new ();
373
gtk_object_set_data (GTK_OBJECT (window), "statusbar1", statusbar1);
374
gtk_widget_show (statusbar1);
375
gtk_box_pack_start (GTK_BOX (hbox_status), statusbar1, TRUE, TRUE, 0);
377
statusbar2 = gtk_statusbar_new ();
378
gtk_object_set_data (GTK_OBJECT (window), "statusbar2", statusbar2);
379
gtk_widget_show (statusbar2);
380
gtk_box_pack_start (GTK_BOX (hbox_status), statusbar2, FALSE, TRUE, 0);
384
/******************* tools functions ******************/
385
/*int search_array_for_text(char ** array, int count, char * text) */
386
int search_array_for_text(char ** array, int count, const char * text)
389
for (i=0;i<count && strcmp(text,array[i])>0 ;i++);
390
return (i >= count)? i-1:i;
393
/******************* call backs ***********************/
394
void select_row_callback(GtkWidget *widget,
397
GdkEventButton *event,
401
if(signal_select_row>0) {signal_select_row--;return;}
402
item = (ManItem*) gtk_clist_get_row_data(GTK_CLIST(widget),row);
403
item->active_man_page();
404
signal_entry_change++;
405
gtk_entry_set_text(GTK_ENTRY(entry),man_items_buffer[row]);
407
void select_row_callback3(GtkWidget *widget,
410
GdkEventButton *event,
414
if(signal_select_row>0) {signal_select_row--;return;}
415
item = (ManItem*) gtk_clist_get_row_data(GTK_CLIST(widget),row);
416
if(item) item->active_man_page();
418
void entry_activate_callback(GtkWidget * w,gpointer data)
421
GtkWidget * clist = (GtkWidget *)data;
422
i = search_array_for_text(man_items_buffer,
424
gtk_entry_get_text(GTK_ENTRY(w)));
426
gtk_clist_moveto(GTK_CLIST(clist),i,0,0.1,0.0);
427
GTK_CLIST(clist)->focus_row = i;
428
gtk_clist_select_row(GTK_CLIST(clist),i,0);
431
void entry_changed_callback(GtkWidget * w,gpointer data)
434
GtkWidget * clist = (GtkWidget *)data;
435
if(signal_entry_change>0) {signal_entry_change--;return;}
436
i = search_array_for_text(man_items_buffer,
438
gtk_entry_get_text(GTK_ENTRY(w)));
441
gtk_clist_moveto(GTK_CLIST(clist),i,0,0.1,0.0);
442
GTK_CLIST(clist)->focus_row = i;
443
gtk_clist_select_row(GTK_CLIST(clist),i,0);
446
static int section_policy_callback(GtkWidget *w, gpointer data) {
447
// static int signal;
450
if(!((GtkCheckMenuItem*)(section_select[k2]))->active) return 1;
451
// g_message("Hello, World! %x\n signal = %d",data,signal_menu_change);
452
if(signal_menu_change>0) {signal_menu_change--;return 1;}
453
//if(!signal) {signal++;return 1;}
455
k = (long) context->get_value("display_section_policy");
456
if(k == k2) return 1;
457
pthread_mutex_lock(&context_lock);
458
context->set_value("display_section_policy","int",(void*)k2);
459
pthread_mutex_unlock(&context_lock);
460
task_set_active(task_extract_man_data);
461
task_set_active(task_add_data_to_clist);
465
static int section_select_callback(GtkWidget *w, gpointer data) {
467
if(signal_menu_change>0) {signal_menu_change--;return 1;}
469
pthread_mutex_lock(&context_lock);
470
var = (long)context->get_value("display_section");
472
context->set_value("display_section","int",(void*)var);
473
if (context->get_value("display_section_policy")) {
474
task_set_active(task_extract_man_data);
475
task_set_active(task_add_data_to_clist);
477
pthread_mutex_unlock(&context_lock);
478
// g_message("Hello, World! %x\n",data);
482
static void app_quit(GtkWidget *w, gpointer data) {
483
// g_message("Bye, World! %x\n",data);
484
char buffer[1024],*p;
488
j = man_paths->get_size();
489
for (i = 0;i<j;i++) {
490
sprintf(p,i?":%s":"%s",man_paths->get_name(i));
493
context->set_value("man_paths","char*",my_strdup(buffer));
494
attach(buffer,getenv("HOME"),".gman");
495
if((fd = fopen(buffer,"w"))) {
496
context->save(fd,"automatically made by Gman");
499
// context->save(stdout,"automatically made by Gman");
501
gtk_exit((long)data);
504
static int window_resize_callback(GtkWidget *w, GtkAllocation * size, gpointer data)
507
g_message("x = %d, y = %d, width = %d, height = %d, data = %x\n",
508
size->x,size->y,size->width,size->height,data); */
509
context->set_value("h_size","int",(void*)size->width);
510
context->set_value("v_size","int",(void*)size->height);
514
static void window_help_about_callback (GtkWidget *widget, gpointer data)
516
const gchar *authors[] = {"Xinkai Wang <aakwxk@hotmail.com>", NULL };
517
static GtkWidget *about_window = NULL;
524
about_window = gtk_dialog_new ();
525
gtk_window_set_position (GTK_WINDOW (about_window), GTK_WIN_POS_MOUSE);
526
gtk_window_set_title (GTK_WINDOW (about_window), _("About gman"));
528
gtk_signal_connect (GTK_OBJECT (about_window), "delete_event",
529
GTK_SIGNAL_FUNC (gtk_false), NULL);
530
gtk_signal_connect (GTK_OBJECT (about_window), "destroy",
531
(GtkSignalFunc) gtk_widget_destroyed,
534
button = gtk_button_new_with_label (_("Close"));
535
gtk_widget_show (button);
536
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (about_window)->action_area),
537
button, TRUE, TRUE, 0);
538
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
539
(GtkSignalFunc) gtk_widget_destroy,
540
GTK_OBJECT (about_window));
542
gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (about_window)->vbox), 5);
544
/* TODO: we need a logo ;) */
546
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (about_window)->vbox),
547
gtk_label_new ("Gman - version " VERSION),
550
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (about_window)->vbox),
551
gtk_label_new ("Copyright (C) 1999 Xinkai Wang"),
554
char *tmp = g_strdup_printf("Credits: %s", authors[0]);
555
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (about_window)->vbox),
560
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (about_window)->vbox),
561
gtk_label_new ("Comments and suggestions are extremely welcomed!"),
564
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (about_window)->vbox),
565
gtk_label_new ("Web: http://homex.coolconnect.com/user/xkwang/gman/"),
568
if (!GTK_WIDGET_VISIBLE (about_window))
569
gtk_widget_show_all (about_window);
571
gtk_widget_hide (about_window);
576
static int status_bar_callback (GtkWidget *widget, gpointer data)
579
if(signal_menu_change>0) {signal_menu_change--;return 1;}
580
k2 = (long) context->get_value("show_status_bar");
581
k = (long) context->get_value("searching_mode");
582
if(((GtkCheckMenuItem*)(status_bar_button))->active) k2 = k2 | (1<<k);
583
else k2 = k2 & ~(1<<k);
584
pthread_mutex_lock(&context_lock);
585
context->set_value("show_status_bar","int",(void*)k2);
586
pthread_mutex_unlock(&context_lock);
587
updata_widget_show(0);
591
static int search_mode_callback (GtkWidget *widget, gpointer data)
595
if(!((GtkCheckMenuItem*)(searching_mode_buttons[k2]))->active) return 1;
596
if(signal_menu_change>0) {signal_menu_change--;return 1;}
597
//if(!signal) {signal++;return 1;}
599
k = (long) context->get_value("searching_mode");
600
if(k == k2) return 1;
601
pthread_mutex_lock(&context_lock);
602
context->set_value("searching_mode","int",(void*)k2);
603
pthread_mutex_unlock(&context_lock);
604
updata_widget_show(0);
605
updata_menu_buttons(0);
609
static int show_mode_callback (GtkWidget *widget, gpointer data)
613
if(!((GtkCheckMenuItem*)(show_mode_buttons[k2]))->active) return 1;
614
if(signal_menu_change>0) {signal_menu_change--;return 1;}
615
//if(!signal) {signal++;return 1;}
617
k = (long) context->get_value("show_mode");
618
if(k == k2) return 1;
619
pthread_mutex_lock(&context_lock);
620
context->set_value("show_mode","int",(void*)k2);
621
pthread_mutex_unlock(&context_lock);
622
//updata_widget_show(0);
623
//updata_menu_buttons(0);
627
static void entry4_activate_callback(GtkWidget *w,gpointer data)
629
keyword = gtk_entry_get_text(GTK_ENTRY(entry4));
630
task_set_active(task_key_word_search);
633
static void entry4_changed_callback(GtkWidget *w,gpointer data)
636
tmp = gtk_entry_get_text(GTK_ENTRY(entry4));
637
gtk_widget_set_sensitive(search_button,strlen(tmp) >= 3);
641
static int button_clicked_callback(GtkWidget * w,gpointer data)
643
long i = (long) data;
645
case 1: task_set_stop(task_key_word_search);break;
646
case 2: task_set_active(task_key_word_search);break;