/** * parse each widget * * @param w: pointer to widget * @param m: no use * @return: NULL **/ static struct widget* do_parse_widget(struct widget* w, union message* m) { NOT_USED(m); /** * record focusable widget **/ if(w->input_enable == 1) { list_push_back(&global_application.focus_list, &w, sizeof(w)); } /** * register window and update active window **/ if(w->is_window) { struct window* parent = (struct window*)object_parent(OBJECT_POINTER(w)); struct window* window_ptr = WINDOW_POINTER(w); si_t parent_descriptor = (parent == NULL ? 0 : parent->descriptor); si_t window_descriptor = register_window(parent_descriptor, window_ptr->title, window_ptr->area.x, window_ptr->area.y, window_ptr->area.width, window_ptr->area.height, window_ptr->minimize_enable, window_ptr->maximize_enable, window_ptr->modal); if(0 == window_descriptor) { EGUI_PRINT_ERROR("failed to register window %s", window_ptr->title); return NULL; } window_ptr->descriptor = window_descriptor; global_application.focus = window_ptr; /** * find icon for the application **/ if((window_ptr->icon_path = (char*)malloc(256)) == NULL) { EGUI_PRINT_ERROR("failed to register window"); return NULL; } else { /** * in C89 standard, snprintf() is NOT included in <stdio.h> * so you have to use sprintf, which may be dangerous. be careful **/ sprintf(window_ptr->icon_path, "%s/icons/%s.bmp", global_application.icon_root_path, global_application.name); if(access(window_ptr->icon_path, R_OK) == -1) { sprintf(window_ptr->icon_path, "%s/icons/default.bmp", global_application.icon_root_path); } } } return NULL; }
void registerAll() { register_vector4(); register_window(); register_overlay(); register_maze(); register_haggis(); register_jumpaction(); register_grenadeaction(); register_walkaction(); register_waitaction(); }
void about_dialog (GtkWidget *widget, gpointer data) { GtkWidget* aboutwindow = NULL; GtkWidget* w = NULL, *w2 = NULL; char *intro = _("XQF Game Server Browser"); char *version = g_strdup_printf(_("Version %s"),XQF_VERSION); /* translators can use the copyright symbol instead of (C) */ char *author = _("Copyright (C) 1998-2002 Roman Pozlevich"); char *urls = "http://www.linuxgames.com/xqf\n" "http://sourceforge.net/projects/xqf\n"; char *contrib1 = _("Maintainers:"); char *contrib2 = "Thomas Debesse <*****@*****.**>\n" "Ludwig Nussel <*****@*****.**>\n" "Alex Burger <*****@*****.**>\n" "Jordi Mallach <*****@*****.**>\n" "Bill Adams <*****@*****.**>\n"; char *contrib3 = _("Contributors:"); char *contrib4 = "Jochen Baier <*****@*****.**>\n" "Luca Camillo <*****@*****.**>\n"; char *bugs1 = _("Bug reports and feature requests:"); char *bugs2 = "http://sourceforge.net/projects/xqf\n" "[email protected]\n"; char *text = NULL;// dialog_ok (_("About XQF"), "%s", text); aboutwindow = create_AboutWindow(); w2 = load_pixmap(aboutwindow, "splash.png"); w = gtk_object_get_data(GTK_OBJECT(aboutwindow),"AboutVBox"); gtk_box_pack_start (GTK_BOX (w), w2, FALSE, FALSE, 0); gtk_box_reorder_child(GTK_BOX(w), w2, 0); gtk_widget_show(w2); w = gtk_object_get_data(GTK_OBJECT(aboutwindow),"AboutLabel"); text = g_strjoin("\n", intro, version, author, urls, contrib1, contrib2, contrib3, contrib4, bugs1, bugs2, NULL); g_free(version); gtk_label_set_text(GTK_LABEL(w), text); g_free(text); gtk_window_set_transient_for (GTK_WINDOW (aboutwindow), GTK_WINDOW (top_window())); register_window(aboutwindow); gtk_widget_show(aboutwindow); }
GtkWidget *dialog_create_modal_transient_window (const char *title, int close_on_esc, int allow_resize, GtkSignalFunc on_destroy) { GtkWidget *window; GtkWidget *parent; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (window_delete_event_callback), NULL); if (on_destroy) { gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (on_destroy), NULL); } gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); if (close_on_esc) { gtk_signal_connect (GTK_OBJECT (window), "key_press_event", GTK_SIGNAL_FUNC (destroy_on_escape), NULL); } if (title) gtk_window_set_title (GTK_WINDOW (window), title); gtk_widget_realize (window); gdk_window_set_decorations (window->window, (allow_resize)? GDK_DECOR_BORDER | GDK_DECOR_TITLE | GDK_DECOR_RESIZEH : GDK_DECOR_BORDER | GDK_DECOR_TITLE); gdk_window_set_functions (window->window, (allow_resize)? GDK_FUNC_MOVE | GDK_FUNC_CLOSE | GDK_FUNC_RESIZE : GDK_FUNC_MOVE | GDK_FUNC_CLOSE); gtk_window_set_modal (GTK_WINDOW (window), TRUE); parent = top_window (); if (parent) gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (parent)); register_window (window); return window; }
/* 总是将孩子节点加在子节点链的最右边 如果 parent 在对象树中 那么完成添加工作后一定要更新 root->parent 的 lchild 成员和 rchild 成员 这是为了保证遍历的正确 */ si_t application_add_window(struct window * parent, struct window * window) { struct object node, * tree; /* 添加顶层窗口 */ if(parent == NULL) { /* node 的父节点是 window */ node.parent = OBJECT_POINTER(window); node.lchild = object_tree_l_most_node(OBJECT_POINTER(window)); node.rchild = object_tree_r_most_node(OBJECT_POINTER(window)); node.name = NULL; node.id = 0; /* 将窗口添加到向量 */ vector_push_back(&(global_application.window_vector), &node, sizeof(struct object)); tree = vector_back(&(global_application.window_vector)); /* window 的父节点是 node */ window->parent = tree; } /* 添加非顶层窗口 */ else { object_insert_child(OBJECT_POINTER(parent), OBJECT_POINTER(window)); } /** * if already running in app_exec **/ if(global_application.exec_flag) { union message msg; msg.base.type = MESSAGE_TYPE_WIDGET_REPAINT; msg.widget_repaint.area = window->area; if(global_application.focus != NULL) { struct window* w = WINDOW_POINTER(global_application.focus); struct object* tree, *node, *tree_real_parent; w->is_activated = 0; msg.widget_repaint.area = w->area; if(w->callback != NULL) { w->callback(w, &msg); } node = OBJECT_POINTER(w); tree = node->parent; tree_real_parent = tree->parent; tree->parent = node; node = object_tree_l_most_node(tree); while(node != NULL) { union message msg; msg.base.type = MESSAGE_TYPE_WIDGET_REPAINT; msg.widget_repaint.area = WIDGET_POINTER(node)->area; if(WIDGET_POINTER(node)->callback != NULL) WIDGET_POINTER(node)->callback(node, &msg); node = object_tree_iterator_increment(tree, node); } tree->parent = tree_real_parent; } window->descriptor = register_window((parent == NULL ? 0 : parent->descriptor), window->title, window->area.x, window->area.y, window->area.width, window->area.height, window->minimize_enable, window->maximize_enable, window->modal); if(window->descriptor == 0) { EGUI_PRINT_ERROR("failed to register window"); application_exit(); return -1; } /** * find icon for the application **/ if((window->icon_path = (char*)malloc(256)) == NULL) { EGUI_PRINT_SYS_ERROR("failed to malloc for icon path. malloc"); application_exit(); return -1; } else { /** * in C89 standard, snprintf() is NOT included in <stdio.h> * so you have to use sprintf, which may be dangerous. be careful **/ sprintf(window->icon_path, "%s/icons/%s.bmp", global_application.icon_root_path, global_application.name); if(access(window->icon_path, R_OK) == -1) { sprintf(window->icon_path, "%s/icons/default.bmp", global_application.icon_root_path); } } msg.widget_repaint.area = window->area; global_application.focus = window; window->is_activated = 1; if(window->callback != NULL) { window->callback(window, &msg); } } return 0; }