From: <kr_...@us...> - 2003-03-03 19:03:30
|
Update of /cvsroot/htoolkit/port/src/cbits/GTK In directory sc8-pr-cvs1:/tmp/cvs-serv29829/src/cbits/GTK Modified Files: Util.c Window.c Added Files: Frame.c Log Message: MDI for GTK --- NEW FILE: Frame.c --- #include "Types.h" #include "Internals.h" #include "Handlers_stub.h" GtkWidget *gMDIFrameWidget; GtkWidget *gMDINotebookWidget; static void frame_close_page_handler(GtkWidget *client) { GtkWidget *window = gtk_notebook_get_nth_page(GTK_NOTEBOOK(client), gtk_notebook_get_current_page(GTK_NOTEBOOK(client))); handleWindowDismiss(window); } static void frame_notebook_top_handler(GtkWidget *client) { gtk_notebook_set_tab_pos(GTK_NOTEBOOK(client), GTK_POS_TOP); } static void frame_notebook_bottom_handler(GtkWidget *client) { gtk_notebook_set_tab_pos(GTK_NOTEBOOK(client), GTK_POS_BOTTOM); } static void frame_notebook_left_handler(GtkWidget *client) { gtk_notebook_set_tab_pos(GTK_NOTEBOOK(client), GTK_POS_LEFT); } static void frame_notebook_right_handler(GtkWidget *client) { gtk_notebook_set_tab_pos(GTK_NOTEBOOK(client), GTK_POS_RIGHT); } static void frame_switch_page_handler(GtkNotebook *notebook,GtkNotebookPage *page,gint page_num,gpointer user_data) { // send deactivate message for old gint old_page_num = g_list_index(notebook->children, notebook->cur_page); handleWindowDeactivate(gtk_notebook_get_nth_page(notebook, old_page_num)); // send activate message for new handleWindowActivate(gtk_notebook_get_nth_page(notebook, page_num)); gActiveTopLevelWindow = gtk_widget_get_parent(gtk_widget_get_parent(GTK_WIDGET(notebook))); } static gboolean frame_delete_handler(GtkWidget *widget, GdkEvent *event, gpointer user_data) { handleDismissProcess(); return gtk_true(); } static gboolean frame_configure_event_handler (GtkWindow *window, GdkEventConfigure *event, gpointer user_data) { int i, nCount; nCount = gtk_notebook_get_n_pages(GTK_NOTEBOOK(gMDINotebookWidget)); for (i = 0; i < nCount; i++) { GtkWidget *widget = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gMDINotebookWidget), i); handleWindowResize(widget,widget->allocation.width,widget->allocation.height); handleWindowReLayout(widget); } return gtk_false(); }; gboolean window_key_press_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data); gboolean window_key_release_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data); gboolean frame_key_press_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { GtkWidget *window = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gMDINotebookWidget), gtk_notebook_get_current_page(GTK_NOTEBOOK(gMDINotebookWidget))); return window_key_press_handler(window, event, user_data); } gboolean frame_key_release_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { GtkWidget *window = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gMDINotebookWidget), gtk_notebook_get_current_page(GTK_NOTEBOOK(gMDINotebookWidget))); return window_key_release_handler(window, event, user_data); } void createMDIFrame() { GtkWidget *menuBar, *box; GtkWidget *notebook_menu, *menu_item, *pages_menu; GtkAccelGroup *accel_group; GSList *group; /* Create the window. */ gMDIFrameWidget = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(gMDIFrameWidget), gAppName); gtk_signal_connect (GTK_OBJECT(gMDIFrameWidget), "delete-event", GTK_SIGNAL_FUNC(frame_delete_handler), NULL); gtk_signal_connect (GTK_OBJECT(gMDIFrameWidget), "configure-event", GTK_SIGNAL_FUNC(frame_configure_event_handler), NULL); gtk_signal_connect (GTK_OBJECT(gMDIFrameWidget), "key-press-event", GTK_SIGNAL_FUNC(frame_key_press_handler), NULL); gtk_signal_connect (GTK_OBJECT(gMDIFrameWidget), "key-release-event", GTK_SIGNAL_FUNC(frame_key_release_handler), NULL); box = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(gMDIFrameWidget), box); /* Create the menubar. */ menuBar = gtk_menu_bar_new(); gtk_box_pack_start(GTK_BOX(box), menuBar, FALSE, FALSE, 0); /* Create client(notebook) */ gMDINotebookWidget = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(gMDINotebookWidget), gtk_true()); gtk_notebook_popup_enable(GTK_NOTEBOOK(gMDINotebookWidget)); gtk_signal_connect (GTK_OBJECT(gMDINotebookWidget), "switch-page", GTK_SIGNAL_FUNC(frame_switch_page_handler), NULL); gtk_box_pack_end(GTK_BOX(box), gMDINotebookWidget, TRUE, TRUE, 0); gtk_window_maximize(GTK_WINDOW(gMDIFrameWidget)); gtk_widget_show_all(gMDIFrameWidget); /* Create "Pages" menu */ pages_menu = gtk_menu_new(); // gtk_menu_set_accel_group(GTK_MENU(pages_menu), accel_group); menu_item = gtk_menu_item_new_with_label("Pages"); gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), pages_menu); gtk_widget_show_all(menu_item); gtk_menu_bar_insert(GTK_MENU_BAR(menuBar), menu_item, 0); notebook_menu = gtk_menu_new(); //gtk_menu_set_accel_group(GTK_MENU(notebook_menu), accel_group); menu_item = gtk_radio_menu_item_new_with_label(NULL, "Top"); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), gtk_true()); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate", GTK_SIGNAL_FUNC (frame_notebook_top_handler), gMDINotebookWidget); gtk_menu_append(GTK_MENU(notebook_menu), menu_item); menu_item = gtk_radio_menu_item_new_with_label(group, "Bottom"); group = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate", GTK_SIGNAL_FUNC (frame_notebook_bottom_handler), gMDINotebookWidget); gtk_menu_append(GTK_MENU(notebook_menu), menu_item); menu_item = gtk_radio_menu_item_new_with_label(group, "Left"); group = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate", GTK_SIGNAL_FUNC (frame_notebook_left_handler), gMDINotebookWidget); gtk_menu_append(GTK_MENU(notebook_menu), menu_item); menu_item = gtk_radio_menu_item_new_with_label(group, "Right"); group = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate", GTK_SIGNAL_FUNC (frame_notebook_right_handler), gMDINotebookWidget); gtk_menu_append(GTK_MENU(notebook_menu), menu_item); menu_item = gtk_menu_item_new_with_label("Notebook"); gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), notebook_menu); gtk_menu_append(GTK_MENU(pages_menu), menu_item); menu_item = gtk_menu_item_new(); gtk_menu_append(GTK_MENU(pages_menu), menu_item); menu_item = gtk_menu_item_new_with_label("Close page"); gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate", GTK_SIGNAL_FUNC (frame_close_page_handler), gMDINotebookWidget); gtk_menu_append(GTK_MENU(pages_menu), menu_item); gtk_widget_show_all(pages_menu); } Index: Util.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Util.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Util.c 3 Mar 2003 00:21:50 -0000 1.4 --- Util.c 3 Mar 2003 19:03:24 -0000 1.5 *************** *** 44,47 **** --- 44,53 ---- gAppName = strdup(AppName); gDocumentInterface = DocumentInterface; + + if (gDocumentInterface == 2) + { + createMDIFrame(); + gActiveObjects++; + } } }; *************** *** 71,74 **** --- 77,83 ---- void osQuit() { + gtk_widget_destroy(gMDIFrameWidget); + gActiveObjects--; + if (gActiveObjects > 0) { *************** *** 129,133 **** GtkBin *GetSW(GtkWidget *window) { ! GList *children = gtk_container_get_children(GTK_CONTAINER(GTK_BIN(window)->child)); while (children) --- 138,146 ---- GtkBin *GetSW(GtkWidget *window) { ! GList *children; ! GtkWidget *vbox; ! ! vbox = (gDocumentInterface == 2) ? window : GTK_BIN(window)->child; ! children = gtk_container_get_children(GTK_CONTAINER(vbox)); while (children) Index: Window.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Window.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Window.c 3 Mar 2003 13:33:15 -0000 1.7 --- Window.c 3 Mar 2003 19:03:24 -0000 1.8 *************** *** 268,272 **** /* DAAN: handle destroy event */ ! static void frame_destroy_handler(GtkWidget *widget, gpointer user_data) { handleWindowDestroy(widget); --- 268,272 ---- /* DAAN: handle destroy event */ ! static void window_destroy_handler(GtkWidget *widget, gpointer user_data) { handleWindowDestroy(widget); *************** *** 274,278 **** } ! static gboolean frame_delete_handler(GtkWidget *widget, GdkEvent *event, gpointer user_data) { handleWindowDismiss(widget); --- 274,278 ---- } ! static gboolean window_delete_handler(GtkWidget *widget, GdkEvent *event, gpointer user_data) { handleWindowDismiss(widget); *************** *** 283,287 **** static int gCurChar = 0; ! static gboolean window_key_press_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { int c; --- 283,287 ---- static int gCurChar = 0; ! gboolean window_key_press_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { int c; *************** *** 324,328 **** }; ! static gboolean window_key_release_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { if (gInKey) --- 324,328 ---- }; ! gboolean window_key_release_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { if (gInKey) *************** *** 339,343 **** } - handleWindowDeactivate(widget); return gtk_false(); }; --- 339,342 ---- *************** *** 371,383 **** GtkWidget *window, *vbox, *fixed, *sw, *viewport; - /* Create a toplevel */ - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(window), gAppName); - /* Create a VBox */ vbox = gtk_vbox_new(gtk_false(), 0); - gtk_container_add(GTK_CONTAINER(window), vbox); gtk_widget_show(vbox); /* Create a Scrolled Window */ sw = gtk_scrolled_window_new (NULL, NULL); --- 370,416 ---- GtkWidget *window, *vbox, *fixed, *sw, *viewport; /* Create a VBox */ vbox = gtk_vbox_new(gtk_false(), 0); gtk_widget_show(vbox); + if (gDocumentInterface == 2) + { + window = vbox; + gtk_notebook_append_page(GTK_NOTEBOOK(gMDINotebookWidget),vbox,gtk_label_new(gAppName)); + + gtk_signal_connect (GTK_OBJECT(vbox), "destroy", + GTK_SIGNAL_FUNC(window_destroy_handler), + NULL); + } + else + { + /* Create a toplevel */ + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), gAppName); + gtk_container_add(GTK_CONTAINER(window), vbox); + + gtk_signal_connect (GTK_OBJECT(window), "destroy", + GTK_SIGNAL_FUNC(window_destroy_handler), + NULL); + gtk_signal_connect (GTK_OBJECT(window), "focus-in-event", + GTK_SIGNAL_FUNC(window_focus_in_handler), + NULL); + gtk_signal_connect (GTK_OBJECT(window), "focus-out-event", + GTK_SIGNAL_FUNC(window_focus_out_handler), + NULL); + gtk_signal_connect (GTK_OBJECT (window), "delete-event", + GTK_SIGNAL_FUNC(window_delete_handler), + NULL); + gtk_signal_connect (GTK_OBJECT(window), "configure-event", + GTK_SIGNAL_FUNC(window_configure_event_handler), + NULL); + gtk_signal_connect (GTK_OBJECT(window), "key-press-event", + GTK_SIGNAL_FUNC(window_key_press_handler), + NULL); + gtk_signal_connect (GTK_OBJECT(window), "key-release-event", + GTK_SIGNAL_FUNC(window_key_release_handler), + NULL); + } + /* Create a Scrolled Window */ sw = gtk_scrolled_window_new (NULL, NULL); *************** *** 397,412 **** /* Signals */ - gtk_signal_connect (GTK_OBJECT(window), "destroy", - GTK_SIGNAL_FUNC(frame_destroy_handler), - NULL); gtk_signal_connect (GTK_OBJECT(fixed), "expose-event", GTK_SIGNAL_FUNC(window_expose_handler), window); - gtk_signal_connect (GTK_OBJECT(window), "focus-in-event", - GTK_SIGNAL_FUNC(window_focus_in_handler), - NULL); - gtk_signal_connect (GTK_OBJECT(window), "focus-out-event", - GTK_SIGNAL_FUNC(window_focus_out_handler), - NULL); gtk_signal_connect (GTK_OBJECT(viewport), "button-press-event", GTK_SIGNAL_FUNC(window_button_press_handler), --- 430,436 ---- *************** *** 424,430 **** GTK_SIGNAL_FUNC(frame_leave_notify_handler), window); - gtk_signal_connect (GTK_OBJECT(window), "configure-event", - GTK_SIGNAL_FUNC(window_configure_event_handler), - NULL); gtk_signal_connect (GTK_OBJECT (gtk_viewport_get_hadjustment (GTK_VIEWPORT(viewport))), "value-changed", GTK_SIGNAL_FUNC(frame_adjustment_value_changed_handler), --- 448,451 ---- *************** *** 433,445 **** GTK_SIGNAL_FUNC(frame_adjustment_value_changed_handler), window); - gtk_signal_connect (GTK_OBJECT (window), "delete-event", - GTK_SIGNAL_FUNC(frame_delete_handler), - NULL); - gtk_signal_connect (GTK_OBJECT(window), "key-press-event", - GTK_SIGNAL_FUNC(window_key_press_handler), - NULL); - gtk_signal_connect (GTK_OBJECT(window), "key-release-event", - GTK_SIGNAL_FUNC(window_key_release_handler), - NULL); gtk_widget_realize(viewport); --- 454,457 ---- *************** *** 502,525 **** char *osGetWindowTitle(WindowHandle window) { ! char *title = GTK_WINDOW(window)->title; ! return strcpy(rmalloc(strlen(title)+1), title); }; ! void osSetWindowTitle(WindowHandle window, char *txt) { ! gtk_window_set_title(GTK_WINDOW(window), txt); }; void osGetWindowViewSize(WindowHandle window, int *res) { ! int w, h; ! gtk_window_get_size(GTK_WINDOW(window), &w, &h); ! res[0] = w-4; ! res[1] = h-4; } void osSetWindowViewSize(WindowHandle window, int w, int h) { ! gtk_window_resize(GTK_WINDOW(window), w+4, h+4); } --- 514,571 ---- char *osGetWindowTitle(WindowHandle window) { ! char *title; ! ! if (gDocumentInterface == 2) ! { ! GtkWidget *label; ! ! label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gMDINotebookWidget),window); ! title = gtk_label_get_text(GTK_LABEL(label)); ! } ! else ! { ! title = GTK_WINDOW(window)->title; ! } ! ! return strdup(title); }; ! void osSetWindowTitle(WindowHandle window, char *title) { ! if (gDocumentInterface == 2) ! { ! GtkWidget *label; ! ! label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gMDINotebookWidget),window); ! gtk_label_set_text(GTK_LABEL(label), title); ! ! gtk_notebook_set_menu_label_text(GTK_NOTEBOOK(gMDINotebookWidget),window,title); ! } ! else ! { ! gtk_window_set_title(GTK_WINDOW(window), title); ! } }; void osGetWindowViewSize(WindowHandle window, int *res) { ! if (gDocumentInterface == 2) ! { ! int w, h; ! gtk_window_get_size(GTK_WINDOW(window), &w, &h); ! res[0] = w-4; ! res[1] = h-4; ! } ! else ! { ! res[0] = window->allocation.width-4; ! res[1] = window->allocation.height-4; ! } } void osSetWindowViewSize(WindowHandle window, int w, int h) { ! if (gDocumentInterface != 2) ! gtk_window_resize(GTK_WINDOW(window), w+4, h+4); } *************** *** 618,622 **** if (scrollbar_spacing < 0) scrollbar_spacing = 3; ! if (rectangle.width < child_requisition.width ) rectangle.width -= scrollbar_spacing + vscrollbar_requisition.width; if (rectangle.height < child_requisition.height) rectangle.height -= scrollbar_spacing + hscrollbar_requisition.height; --- 664,668 ---- if (scrollbar_spacing < 0) scrollbar_spacing = 3; ! if (rectangle.width < child_requisition.width ) rectangle.width -= scrollbar_spacing + vscrollbar_requisition.width; if (rectangle.height < child_requisition.height) rectangle.height -= scrollbar_spacing + hscrollbar_requisition.height; *************** *** 669,695 **** void osSetWindowRect(WindowHandle window, int x0, int y0, int x1, int y1) { ! gtk_window_move( GTK_WINDOW(window), x0, y0 ); ! gtk_window_resize( GTK_WINDOW(window), abs (x1 - x0), abs (y1 - y0) ); } void osGetWindowRect(WindowHandle window, int *res) { ! int x = 0; ! int y = 0; ! int w = 0; ! ! int h = 0; ! gtk_window_get_position( GTK_WINDOW(window), &x, &y ); ! gtk_window_get_size( GTK_WINDOW(window), &w, &h ); ! res[0] = x; ! res[1] = y; ! res[2] = x+w; ! res[3] = y+h; } void osSetWindowResizeable(WindowHandle window, int resizeable ) { ! gtk_window_set_resizable(GTK_WINDOW(window), resizeable != 0); } --- 715,756 ---- void osSetWindowRect(WindowHandle window, int x0, int y0, int x1, int y1) { ! if (gDocumentInterface != 2) ! { ! gtk_window_move(GTK_WINDOW(window), x0, y0); ! gtk_window_resize(GTK_WINDOW(window), abs (x1 - x0), abs (y1 - y0)); ! } } void osGetWindowRect(WindowHandle window, int *res) { ! if (gDocumentInterface == 2) ! { ! res[0] = 0; ! res[1] = 0; ! res[2] = window->allocation.width; ! res[3] = window->allocation.height; ! } ! else ! { ! int x = 0; ! int y = 0; ! int w = 0; ! int h = 0; ! gtk_window_get_position( GTK_WINDOW(window), &x, &y); ! gtk_window_get_size( GTK_WINDOW(window), &w, &h); ! res[0] = x; ! res[1] = y; ! res[2] = x+w; ! res[3] = y+h; ! } } void osSetWindowResizeable(WindowHandle window, int resizeable ) { ! if (gDocumentInterface != 2 || GTK_IS_DIALOG(window)) ! { ! gtk_window_set_resizable(GTK_WINDOW(window), resizeable != 0); ! } } |