• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Aucun tag

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Révision2f7e337032b081e4fa6874e7261c089e4c22693a (tree)
l'heure2023-03-01 20:55:20
Auteurphabrics <phabrics@phab...>
Commiterphabrics

Message de Log

Continued migration from GTK3 to GTK4 using recommended changes from GTK4 documentation.

Change Summary

Modification

--- a/host/display/gtk/gtk-display.c
+++ b/host/display/gtk/gtk-display.c
@@ -75,6 +75,8 @@ _tme_gtk_display_update(struct tme_display *display) {
7575 return !rc;
7676 }
7777
78+#if GTK_MAJOR_VERSION == 3
79+
7880 /* this sets the screen scaling to that indicated by the Scale menu: */
7981 static void
8082 _tme_gtk_screen_scale_default(GtkWidget *widget,
@@ -119,7 +121,6 @@ _tme_gtk_screen_scale_double(GtkWidget *widget,
119121 _tme_screen_scale_set(screen, TME_FB_XLAT_SCALE_DOUBLE );
120122 }
121123
122-#if GTK_MAJOR_VERSION == 3
123124 /* this sets the screen size: */
124125 static inline void
125126 _tme_screen_format_set(_tme_gtk_screen *screen,
@@ -193,8 +194,6 @@ static struct tme_display_menu_item format_items[] =
193194 { _("RGB16_565"), G_CALLBACK(_tme_gtk_screen_format_rgb16_565) }
194195 };
195196
196-#endif
197-
198197 static struct tme_display_menu_item scale_items[] =
199198 {
200199 { _("Default"), G_CALLBACK(_tme_gtk_screen_scale_default) },
@@ -203,12 +202,14 @@ static struct tme_display_menu_item scale_items[] =
203202 { _("Double"), G_CALLBACK(_tme_gtk_screen_scale_double) }
204203 };
205204
205+#endif
206+
206207 /* Screen-specific size request */
207208 static void _tme_gtk_screen_resize(_tme_gtk_screen *screen) {
208209 struct tme_fb_connection *conn_fb = screen->screen.tme_screen_fb;
209210
210211 /* set a minimum size */
211- gtk_widget_set_size_request(screen->tme_gtk_screen_gtkframe,
212+ gtk_widget_set_size_request(screen->tme_gtk_screen_draw,
212213 conn_fb->tme_fb_connection_width,
213214 conn_fb->tme_fb_connection_height);
214215 }
@@ -303,7 +304,7 @@ _tme_gtk_screen_redraw(_tme_gtk_screen *screen, int x, int y, int w, int h)
303304 {
304305 cairo_surface_flush(screen->tme_gtk_screen_surface);
305306 cairo_surface_mark_dirty(screen->tme_gtk_screen_surface);
306- gtk_widget_queue_draw(screen->tme_gtk_screen_gtkframe);
307+ gtk_widget_queue_draw(screen->tme_gtk_screen_draw);
307308 }
308309
309310 /* Redraw the screen from the surface. Note that the ::draw
@@ -352,37 +353,56 @@ _tme_gtk_screen_new(_tme_gtk_display *display,
352353 struct tme_connection *conn)
353354 {
354355 _tme_gtk_screen *screen;
356+ GtkWidget *vbox;
357+#if GTK_MAJOR_VERSION == 3
355358 GtkWidget *menu_bar;
356359 GtkWidget *menu;
357360 GtkWidget *submenu;
358361 GtkWidget *menu_item;
359-
362+#endif
363+
360364 screen = tme_screen_new(display, _tme_gtk_screen, conn);
361365
366+ /* create the header bar: */
367+ screen->tme_gtk_screen_header = gtk_header_bar_new();
368+
369+ /* create the outer vertical packing box: */
370+ vbox
371+ = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
372+
373+ /* create the Draw for the framebuffer area: */
374+ screen->tme_gtk_screen_draw = gtk_drawing_area_new();
375+
362376 /* create the top-level window, and allow it to shrink, grow,
363377 and auto-shrink: */
364378 screen->tme_gtk_screen_window =
365379 #if GTK_MAJOR_VERSION == 4
366380 gtk_window_new();
381+
382+ gtk_drawing_area_set_draw_func(GTK_DRAWING_AREA(screen->tme_gtk_screen_draw),
383+ _tme_gtk_screen_draw, screen, NULL);
384+ g_signal_connect_after(screen->tme_gtk_screen_draw, "resize",
385+ G_CALLBACK(_tme_gtk_screen_configure), screen);
386+
387+ /* add the outer vertical packing box to the window: */
388+ gtk_window_set_child(GTK_WINDOW(screen->tme_gtk_screen_window), vbox);
389+
390+ /* pack the Draw into the outer vertical packing box: */
391+ gtk_box_prepend(GTK_BOX(vbox),
392+ screen->tme_gtk_screen_draw);
393+
367394 #elif GTK_MAJOR_VERSION == 3
368395 gtk_window_new(GTK_WINDOW_TOPLEVEL);
369396 screen->screen.tme_screen_scale = gdk_monitor_get_scale_factor(display->tme_gdk_display_monitor);
370-#endif
371-
372- gtk_window_set_resizable(GTK_WINDOW(screen->tme_gtk_screen_window), FALSE);
373-
374- /* create the outer vertical packing box: */
375- screen->tme_gtk_screen_vbox0
376- = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
377397
378398 /* add the outer vertical packing box to the window: */
379399 gtk_container_add(GTK_CONTAINER(screen->tme_gtk_screen_window),
380- screen->tme_gtk_screen_vbox0);
400+ vbox);
381401
382402 /* create the menu bar and pack it into the outer vertical packing
383403 box: */
384404 menu_bar = gtk_menu_bar_new ();
385- gtk_box_pack_start(GTK_BOX(screen->tme_gtk_screen_vbox0),
405+ gtk_box_pack_start(GTK_BOX(vbox),
386406 menu_bar,
387407 FALSE, FALSE, 0);
388408 // gtk_widget_show(menu_bar);
@@ -399,7 +419,6 @@ _tme_gtk_screen_new(_tme_gtk_display *display,
399419 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu);
400420 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
401421
402-#if GTK_MAJOR_VERSION == 3
403422 /* create the Screen colormap submenu: */
404423 submenu = _tme_display_menu_radio(screen, format_items, TME_ARRAY_ELS(format_items));
405424
@@ -411,8 +430,6 @@ _tme_gtk_screen_new(_tme_gtk_display *display,
411430
412431 _tme_screen_format_set(screen, CAIRO_FORMAT_RGB24);
413432
414-#endif
415-
416433 /* create the Screen menu bar item, attach the menu to it, and
417434 attach the menu bar item to the menu bar: */
418435 menu_item = gtk_menu_item_new_with_label("Screen");
@@ -420,37 +437,28 @@ _tme_gtk_screen_new(_tme_gtk_display *display,
420437 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu);
421438 gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item);
422439
423- /* create the Gtkframe for the framebuffer area: */
424- screen->tme_gtk_screen_gtkframe = gtk_drawing_area_new();
425-
426- /* new a minimum size */
427- //_tme_gtk_screen_set_size(screen, BLANK_SIDE, BLANK_SIDE);
428- // _tme_gtk_screen_init(screen->tme_gtk_screen_gtkframe, screen);
429-
430-
431- /* pack the Gtkframe into the outer vertical packing box: */
432- gtk_box_pack_start(GTK_BOX(screen->tme_gtk_screen_vbox0),
433- screen->tme_gtk_screen_gtkframe,
440+ /* pack the Draw into the outer vertical packing box: */
441+ gtk_box_pack_start(GTK_BOX(vbox),
442+ screen->tme_gtk_screen_draw,
434443 FALSE, FALSE, 0);
435444
436-#if GTK_MAJOR_VERSION == 4
437- gtk_drawing_area_set_draw_func(GTK_DRAWING_AREA(screen->tme_gtk_screen_gtkframe),
438- _tme_gtk_screen_draw, screen, NULL);
439- g_signal_connect_after(screen->tme_gtk_screen_gtkframe, "resize",
440- G_CALLBACK(_tme_gtk_screen_configure), screen);
441-#elif GTK_MAJOR_VERSION == 3
442- g_signal_connect(screen->tme_gtk_screen_gtkframe, "draw",
445+ g_signal_connect(screen->tme_gtk_screen_draw, "draw",
443446 G_CALLBACK(_tme_gtk_screen_draw), screen);
444- g_signal_connect(screen->tme_gtk_screen_gtkframe, "configure-event",
447+ g_signal_connect(screen->tme_gtk_screen_draw, "configure-event",
445448 G_CALLBACK(_tme_gtk_screen_configure), screen);
446449 #endif
447450
451+ gtk_window_set_resizable(GTK_WINDOW(screen->tme_gtk_screen_window), FALSE);
452+
448453 /* attach the mouse to this screen: */
449454 _tme_gtk_mouse_attach(screen);
450455
451456 /* attach the keyboard to this screen: */
452457 _tme_gtk_keyboard_attach(screen);
453458
459+ gtk_window_set_titlebar(GTK_WINDOW(screen->tme_gtk_screen_window),
460+ screen->tme_gtk_screen_header);
461+
454462 gtk_window_set_title(GTK_WINDOW(screen->tme_gtk_screen_window),
455463 display->display.tme_display_title);
456464
@@ -469,6 +477,7 @@ _tme_gtk_screen_new(_tme_gtk_display *display,
469477 return (screen);
470478 }
471479
480+#if GTK_MAJOR_VERSION == 3
472481 /* this creates a menu of radio buttons: */
473482 GtkWidget *
474483 _tme_display_menu_radio(_tme_gtk_screen *screen,
@@ -502,6 +511,7 @@ _tme_display_menu_radio(_tme_gtk_screen *screen,
502511 /* return the menu: */
503512 return (menu);
504513 }
514+#endif
505515
506516 /* the new GTK display function: */
507517 TME_ELEMENT_SUB_NEW_DECL(tme_host_gtk,display) {
--- a/host/display/gtk/gtk-display.h
+++ b/host/display/gtk/gtk-display.h
@@ -51,12 +51,12 @@ _TME_RCSID("$Id: gtk-display.h,v 1.10 2009/08/28 01:29:47 fredette Exp $");
5151
5252 /* a display: */
5353 typedef struct tme_gtk_display {
54- /* the GTK application structure */
55- GtkApplication *tme_gtk_application;
56-
5754 /* the generic display structure */
5855 struct tme_display display;
5956
57+ /* the GTK application structure */
58+ GtkApplication *tme_gtk_application;
59+
6060 GdkDisplay *tme_gdk_display;
6161
6262 GdkCursor *tme_gdk_display_cursor;
@@ -77,26 +77,30 @@ typedef struct tme_gtk_screen {
7777 /* the top-level window: */
7878 GtkWidget *tme_gtk_screen_window;
7979
80- /* the outer vertical packing box: */
81- GtkWidget *tme_gtk_screen_vbox0;
80+ /* the header bar: */
81+ GtkWidget *tme_gtk_screen_header;
8282
83- /* the GtkWidget, GdkWindow & cairo_surface for the framebuffer: */
84- GtkWidget *tme_gtk_screen_gtkframe;
83+ /* the drawing area & surface for the framebuffer: */
84+ GtkWidget *tme_gtk_screen_draw;
8585 cairo_surface_t *tme_gtk_screen_surface;
86- cairo_format_t tme_gtk_screen_format;
8786
8887 /* the mouse on label: */
8988 GtkWidget *tme_gtk_screen_mouse_label;
9089
91- /* the status bar, and the context ID: */
92- GtkWidget *tme_gtk_screen_mouse_statusbar;
93- guint tme_gtk_screen_mouse_statusbar_cid;
94-
9590 /* if GDK_VoidSymbol, mouse mode is off. otherwise,
9691 mouse mode is on, and this is the keyval that will
9792 turn mouse mode off: */
9893 guint tme_gtk_screen_mouse_keyval;
9994
95+#if GTK_MAJOR_VERSION == 3
96+ /* the status bar, and the context ID: */
97+ GtkWidget *tme_gtk_screen_mouse_statusbar;
98+ guint tme_gtk_screen_mouse_statusbar_cid;
99+
100+ cairo_format_t tme_gtk_screen_format;
101+ GtkEventControllerKey *key;
102+ GtkEventControllerMotion *motion;
103+
100104 /* when mouse mode is on, this is the previous events mask
101105 for the framebuffer event box: */
102106 //GdkEventMask tme_gtk_screen_mouse_events_old;
@@ -112,9 +116,12 @@ struct tme_display_menu_item {
112116 };
113117
114118 /* prototypes: */
119+GtkWidget *_tme_display_menu_radio _TME_P((struct tme_gtk_screen *, struct tme_display_menu_item *, int num_items));
120+#else
121+} _tme_gtk_screen, *tme_gtk_screen;
122+#endif
115123 void _tme_gtk_keyboard_attach _TME_P((struct tme_gtk_screen *));
116124 void _tme_gtk_mouse_attach _TME_P((struct tme_gtk_screen *));
117-GtkWidget *_tme_display_menu_radio _TME_P((struct tme_gtk_screen *, struct tme_display_menu_item *, int num_items));
118125
119126 #endif /* _HOST_GTK_DISPLAY_H */
120127
--- a/host/display/gtk/gtk-keyboard.c
+++ b/host/display/gtk/gtk-keyboard.c
@@ -73,19 +73,21 @@ _tme_gtk_keyboard_attach(struct tme_gtk_screen *screen)
7373 GtkEventControllerKey *key;
7474 GtkEventControllerMotion *motion;
7575
76- motion=gtk_event_controller_motion_new(screen->tme_gtk_screen_gtkframe);
77- gtk_widget_add_controller(screen->tme_gtk_screen_gtkframe, GTK_EVENT_CONTROLLER(motion));
76+#if GTK_MAJOR_VERSION == 4
77+ motion=gtk_event_controller_motion_new();
78+ key=gtk_event_controller_key_new();
79+ gtk_widget_add_controller(screen->tme_gtk_screen_draw, GTK_EVENT_CONTROLLER(key));
80+ gtk_widget_add_controller(screen->tme_gtk_screen_draw, GTK_EVENT_CONTROLLER(motion));
81+#elif GTK_MAJOR_VERSION == 3
82+ motion=screen->motion=gtk_event_controller_motion_new(screen->tme_gtk_screen_draw);
83+ key=screen->key=gtk_event_controller_key_new(screen->tme_gtk_screen_draw);
84+#endif
7885
7986 /* on entering window, grab keyboard focus: */
8087 g_signal_connect_swapped(motion,
8188 "enter",
8289 G_CALLBACK(gtk_widget_grab_focus),
83- screen->tme_gtk_screen_gtkframe);
84-
85- /* set the signal handler for the key events: */
86- key=gtk_event_controller_key_new(screen->tme_gtk_screen_gtkframe);
87-
88- gtk_widget_add_controller(screen->tme_gtk_screen_gtkframe, GTK_EVENT_CONTROLLER(key));
90+ screen->tme_gtk_screen_draw);
8991
9092 g_signal_connect_after(key,
9193 "key-pressed",
@@ -97,8 +99,8 @@ _tme_gtk_keyboard_attach(struct tme_gtk_screen *screen)
9799 screen->screen.tme_screen_display);
98100
99101 /* the event box can focus, and have it grab the focus now: */
100- gtk_widget_set_can_focus(screen->tme_gtk_screen_gtkframe, TRUE);
101- gtk_widget_grab_focus(screen->tme_gtk_screen_gtkframe);
102+ gtk_widget_set_can_focus(screen->tme_gtk_screen_draw, TRUE);
103+ gtk_widget_grab_focus(screen->tme_gtk_screen_draw);
102104
103105 }
104106
--- a/host/display/gtk/gtk-mouse.c
+++ b/host/display/gtk/gtk-mouse.c
@@ -41,7 +41,7 @@ _TME_RCSID("$Id: gtk-mouse.c,v 1.3 2007/03/03 15:33:22 fredette Exp $");
4141 #include <gdk/gdkkeysyms.h>
4242
4343 #if 0
44-/* this warps the pointer to the middle of the Gtkframe: */
44+/* this warps the pointer to the middle of the Draw: */
4545 void
4646 _tme_gtk_mouse_warp_pointer(struct tme_gtk_screen *screen)
4747 {
@@ -164,22 +164,22 @@ _tme_gtk_mouse_ebox_event(GtkWidget *widget,
164164 status);
165165 tme_free(status);
166166
167- window = gtk_widget_get_window(screen->tme_gtk_screen_gtkframe);
167+ window = gtk_widget_get_window(screen->tme_gtk_screen_draw);
168168
169169 /* if the original events mask on the framebuffer event box have
170170 never been saved, save them now, and add the mouse events: */
171171 /* if (screen->tme_gtk_screen_mouse_events_old == 0) {
172172 screen->tme_gtk_screen_mouse_events_old
173- = gtk_widget_get_events(screen->tme_gtk_screen_gtkframe);
174- gtk_widget_add_events(screen->tme_gtk_screen_gtkframe,
173+ = gtk_widget_get_events(screen->tme_gtk_screen_draw);
174+ gtk_widget_add_events(screen->tme_gtk_screen_draw,
175175 GDK_POINTER_MOTION_MASK
176176 | GDK_BUTTON_PRESS_MASK
177177 | GDK_BUTTON_RELEASE_MASK);
178178 }
179179 */
180180 /* grab the pointer: */
181- gtk_grab_add(screen->tme_gtk_screen_gtkframe);
182- /*gtk_device_grab_add(screen->tme_gtk_screen_gtkframe,
181+ gtk_grab_add(screen->tme_gtk_screen_draw);
182+ /*gtk_device_grab_add(screen->tme_gtk_screen_draw,
183183 gdk_seat_get_pointer(display->tme_gdk_display_seat),
184184 FALSE);*/
185185
@@ -226,11 +226,11 @@ _tme_gtk_mouse_mode_off(struct tme_gtk_screen *screen,
226226
227227 /* ungrab the pointer: */
228228 gdk_seat_ungrab(display->tme_gdk_display_seat);
229- gtk_grab_remove(screen->tme_gtk_screen_gtkframe);
230- //gtk_device_grab_remove(screen->tme_gtk_screen_gtkframe, gdk_seat_get_pointer(display->tme_gdk_display_seat));
229+ gtk_grab_remove(screen->tme_gtk_screen_draw);
230+ //gtk_device_grab_remove(screen->tme_gtk_screen_draw, gdk_seat_get_pointer(display->tme_gdk_display_seat));
231231
232232 /* restore the old events mask on the event box: */
233- // gtk_widget_set_events(screen->tme_gtk_screen_gtkframe, screen->tme_gtk_screen_mouse_events_old);
233+ // gtk_widget_set_events(screen->tme_gtk_screen_draw, screen->tme_gtk_screen_mouse_events_old);
234234
235235 /* pop our message off of the statusbar: */
236236 gtk_statusbar_pop(GTK_STATUSBAR(screen->tme_gtk_screen_mouse_statusbar),
@@ -248,27 +248,13 @@ _tme_gtk_mouse_mode_off(struct tme_gtk_screen *screen,
248248 void
249249 _tme_gtk_mouse_attach(struct tme_gtk_screen *screen)
250250 {
251- GtkWidget *hbox0;
252251 GtkWidget *ebox;
253252
254- /* create the horizontal packing box for the mouse controls: */
255- hbox0 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
256-
257- /* pack the horizontal packing box into the outer vertical packing box: */
258- gtk_box_pack_start(GTK_BOX(screen->tme_gtk_screen_vbox0),
259- hbox0,
260- FALSE, FALSE, 0);
261-
262- /* show the horizontal packing box: */
263- gtk_widget_show(hbox0);
264-
265253 /* create the event box for the mouse on label: */
266254 ebox = gtk_event_box_new();
267-
255+
268256 /* pack the event box into the horizontal packing box: */
269- gtk_box_pack_start(GTK_BOX(hbox0),
270- ebox,
271- FALSE, FALSE, 0);
257+ gtk_header_bar_pack_start(GTK_HEADER_BAR(screen->tme_gtk_screen_header), ebox);
272258
273259 /* set the tip on the event box, which will eventually contain the mouse on label: */
274260 gtk_widget_set_tooltip_text(ebox,
@@ -288,9 +274,6 @@ _tme_gtk_mouse_attach(struct tme_gtk_screen *screen)
288274 /* the event box can focus: */
289275 gtk_widget_set_can_focus(ebox, TRUE);
290276
291- /* show the event box: */
292- gtk_widget_show(ebox);
293-
294277 /* create the mouse on label: */
295278 screen->tme_gtk_screen_mouse_label
296279 = gtk_label_new(_("Mouse is off"));
@@ -299,20 +282,13 @@ _tme_gtk_mouse_attach(struct tme_gtk_screen *screen)
299282 gtk_container_add(GTK_CONTAINER(ebox),
300283 screen->tme_gtk_screen_mouse_label);
301284
302- /* show the mouse on label: */
303- gtk_widget_show(screen->tme_gtk_screen_mouse_label);
304-
305285 /* create the mouse statusbar: */
306286 screen->tme_gtk_screen_mouse_statusbar
307287 = gtk_statusbar_new();
308288
309289 /* pack the mouse statusbar into the horizontal packing box: */
310- gtk_box_pack_start(GTK_BOX(hbox0),
311- screen->tme_gtk_screen_mouse_statusbar,
312- TRUE, TRUE, 10);
313-
314- /* show the mouse statusbar: */
315- gtk_widget_show(screen->tme_gtk_screen_mouse_statusbar);
290+ gtk_header_bar_pack_start(GTK_HEADER_BAR(screen->tme_gtk_screen_header),
291+ screen->tme_gtk_screen_mouse_statusbar);
316292
317293 /* push an initial message onto the statusbar: */
318294 screen->tme_gtk_screen_mouse_statusbar_cid
@@ -321,18 +297,18 @@ _tme_gtk_mouse_attach(struct tme_gtk_screen *screen)
321297 gtk_statusbar_push(GTK_STATUSBAR(screen->tme_gtk_screen_mouse_statusbar),
322298 screen->tme_gtk_screen_mouse_statusbar_cid,
323299 _("The Machine Emulator"));
324-
300+
325301 /* although the event mask doesn't include these events yet,
326302 set a signal handler for the mouse events: */
327- g_signal_connect(screen->tme_gtk_screen_gtkframe,
303+ g_signal_connect(screen->tme_gtk_screen_draw,
328304 "motion_notify_event",
329305 G_CALLBACK(_tme_gtk_mouse_mouse_event),
330306 screen->screen.tme_screen_display);
331- g_signal_connect(screen->tme_gtk_screen_gtkframe,
307+ g_signal_connect(screen->tme_gtk_screen_draw,
332308 "button_press_event",
333309 G_CALLBACK(_tme_gtk_mouse_mouse_event),
334310 screen->screen.tme_screen_display);
335- g_signal_connect(screen->tme_gtk_screen_gtkframe,
311+ g_signal_connect(screen->tme_gtk_screen_draw,
336312 "button_release_event",
337313 G_CALLBACK(_tme_gtk_mouse_mouse_event),
338314 screen->screen.tme_screen_display);