Lines Matching full:vc
130 #define TYPE_CHARDEV_VC "chardev-vc"
138 static void gd_grab_pointer(VirtualConsole *vc, const char *reason);
140 static void gd_grab_keyboard(VirtualConsole *vc, const char *reason);
147 VirtualConsole *vc; in gd_vc_find_by_menu() local
151 vc = &s->vc[i]; in gd_vc_find_by_menu()
153 (GTK_CHECK_MENU_ITEM(vc->menu_item))) { in gd_vc_find_by_menu()
154 return vc; in gd_vc_find_by_menu()
162 VirtualConsole *vc; in gd_vc_find_by_page() local
166 vc = &s->vc[i]; in gd_vc_find_by_page()
167 p = gtk_notebook_page_num(GTK_NOTEBOOK(s->notebook), vc->tab_item); in gd_vc_find_by_page()
169 return vc; in gd_vc_find_by_page()
193 static void gd_update_cursor(VirtualConsole *vc) in gd_update_cursor() argument
195 GtkDisplayState *s = vc->s; in gd_update_cursor()
198 if (vc->type != GD_VC_GFX || in gd_update_cursor()
199 !qemu_console_is_graphic(vc->gfx.dcl.con)) { in gd_update_cursor()
203 if (!gtk_widget_get_realized(vc->gfx.drawing_area)) { in gd_update_cursor()
207 window = gtk_widget_get_window(GTK_WIDGET(vc->gfx.drawing_area)); in gd_update_cursor()
208 if (s->full_screen || qemu_input_is_absolute(vc->gfx.dcl.con) || s->ptr_owner == vc) { in gd_update_cursor()
248 VirtualConsole *vc = &s->vc[i]; in gd_update_caption() local
250 if (!vc->window) { in gd_update_caption()
253 title = g_strdup_printf("%s: %s%s%s", prefix, vc->label, in gd_update_caption()
254 vc == s->kbd_owner ? " +kbd" : "", in gd_update_caption()
255 vc == s->ptr_owner ? " +ptr" : ""); in gd_update_caption()
256 gtk_window_set_title(GTK_WINDOW(vc->window), title); in gd_update_caption()
263 static void gd_update_geometry_hints(VirtualConsole *vc) in gd_update_geometry_hints() argument
265 GtkDisplayState *s = vc->s; in gd_update_geometry_hints()
271 if (vc->type == GD_VC_GFX) { in gd_update_geometry_hints()
272 if (!vc->gfx.ds) { in gd_update_geometry_hints()
276 geo.min_width = surface_width(vc->gfx.ds) * VC_SCALE_MIN; in gd_update_geometry_hints()
277 geo.min_height = surface_height(vc->gfx.ds) * VC_SCALE_MIN; in gd_update_geometry_hints()
280 geo.min_width = surface_width(vc->gfx.ds) * vc->gfx.scale_x; in gd_update_geometry_hints()
281 geo.min_height = surface_height(vc->gfx.ds) * vc->gfx.scale_y; in gd_update_geometry_hints()
284 geo_widget = vc->gfx.drawing_area; in gd_update_geometry_hints()
288 } else if (vc->type == GD_VC_VTE) { in gd_update_geometry_hints()
289 VteTerminal *term = VTE_TERMINAL(vc->vte.terminal); in gd_update_geometry_hints()
294 gtk_widget_get_style_context(vc->vte.terminal), in gd_update_geometry_hints()
295 gtk_widget_get_state_flags(vc->vte.terminal), in gd_update_geometry_hints()
300 gtk_widget_style_get(vc->vte.terminal, "inner-border", &ib, NULL); in gd_update_geometry_hints()
322 geo_widget = vc->vte.terminal; in gd_update_geometry_hints()
326 geo_window = GTK_WINDOW(vc->window ? vc->window : s->window); in gd_update_geometry_hints()
330 void gd_update_windowsize(VirtualConsole *vc) in gd_update_windowsize() argument
332 GtkDisplayState *s = vc->s; in gd_update_windowsize()
334 gd_update_geometry_hints(vc); in gd_update_windowsize()
336 if (vc->type == GD_VC_GFX && !s->full_screen && !s->free_scale) { in gd_update_windowsize()
337 gtk_window_resize(GTK_WINDOW(vc->window ? vc->window : s->window), in gd_update_windowsize()
342 static void gd_update_full_redraw(VirtualConsole *vc) in gd_update_full_redraw() argument
344 GtkWidget *area = vc->gfx.drawing_area; in gd_update_full_redraw()
349 if (vc->gfx.gls && gtk_use_gl_area) { in gd_update_full_redraw()
350 gtk_gl_area_queue_render(GTK_GL_AREA(vc->gfx.drawing_area)); in gd_update_full_redraw()
359 VirtualConsole *vc = gd_vc_find_current(s); in gtk_release_modifiers() local
361 if (vc->type != GD_VC_GFX || in gtk_release_modifiers()
362 !qemu_console_is_graphic(vc->gfx.dcl.con)) { in gtk_release_modifiers()
365 qkbd_state_lift_all_keys(vc->gfx.kbd); in gtk_release_modifiers()
377 static void *gd_win32_get_hwnd(VirtualConsole *vc) in gd_win32_get_hwnd() argument
381 gtk_widget_get_window(vc->window ? vc->window : vc->s->window)); in gd_win32_get_hwnd()
392 VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl); in gd_update() local
399 trace_gd_update(vc->label, x, y, w, h); in gd_update()
401 if (!gtk_widget_get_realized(vc->gfx.drawing_area)) { in gd_update()
405 if (vc->gfx.convert) { in gd_update()
406 pixman_image_composite(PIXMAN_OP_SRC, vc->gfx.ds->image, in gd_update()
407 NULL, vc->gfx.convert, in gd_update()
411 x1 = floor(x * vc->gfx.scale_x); in gd_update()
412 y1 = floor(y * vc->gfx.scale_y); in gd_update()
414 x2 = ceil(x * vc->gfx.scale_x + w * vc->gfx.scale_x); in gd_update()
415 y2 = ceil(y * vc->gfx.scale_y + h * vc->gfx.scale_y); in gd_update()
417 fbw = surface_width(vc->gfx.ds) * vc->gfx.scale_x; in gd_update()
418 fbh = surface_height(vc->gfx.ds) * vc->gfx.scale_y; in gd_update()
420 win = gtk_widget_get_window(vc->gfx.drawing_area); in gd_update()
435 gtk_widget_queue_draw_area(vc->gfx.drawing_area, in gd_update()
452 VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl); in gd_mouse_set() local
456 if (!gtk_widget_get_realized(vc->gfx.drawing_area) || in gd_mouse_set()
461 dpy = gtk_widget_get_display(vc->gfx.drawing_area); in gd_mouse_set()
462 gdk_window_get_root_coords(gtk_widget_get_window(vc->gfx.drawing_area), in gd_mouse_set()
465 gtk_widget_get_screen(vc->gfx.drawing_area), in gd_mouse_set()
467 vc->s->last_x = x; in gd_mouse_set()
468 vc->s->last_y = y; in gd_mouse_set()
474 VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl); in gd_cursor_define() local
478 if (!gtk_widget_get_realized(vc->gfx.drawing_area)) { in gd_cursor_define()
487 (gtk_widget_get_display(vc->gfx.drawing_area), in gd_cursor_define()
489 gdk_window_set_cursor(gtk_widget_get_window(vc->gfx.drawing_area), cursor); in gd_cursor_define()
497 VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl); in gd_switch() local
500 trace_gd_switch(vc->label, surface_width(surface), surface_height(surface)); in gd_switch()
502 if (vc->gfx.surface) { in gd_switch()
503 cairo_surface_destroy(vc->gfx.surface); in gd_switch()
504 vc->gfx.surface = NULL; in gd_switch()
506 if (vc->gfx.convert) { in gd_switch()
507 pixman_image_unref(vc->gfx.convert); in gd_switch()
508 vc->gfx.convert = NULL; in gd_switch()
511 if (vc->gfx.ds && in gd_switch()
512 surface_width(vc->gfx.ds) == surface_width(surface) && in gd_switch()
513 surface_height(vc->gfx.ds) == surface_height(surface)) { in gd_switch()
516 vc->gfx.ds = surface; in gd_switch()
525 vc->gfx.surface = cairo_image_surface_create_for_data in gd_switch()
533 vc->gfx.convert = pixman_image_create_bits(PIXMAN_x8r8g8b8, in gd_switch()
537 vc->gfx.surface = cairo_image_surface_create_for_data in gd_switch()
538 ((void *)pixman_image_get_data(vc->gfx.convert), in gd_switch()
540 pixman_image_get_width(vc->gfx.convert), in gd_switch()
541 pixman_image_get_height(vc->gfx.convert), in gd_switch()
542 pixman_image_get_stride(vc->gfx.convert)); in gd_switch()
543 pixman_image_composite(PIXMAN_OP_SRC, vc->gfx.ds->image, in gd_switch()
544 NULL, vc->gfx.convert, in gd_switch()
546 pixman_image_get_width(vc->gfx.convert), in gd_switch()
547 pixman_image_get_height(vc->gfx.convert)); in gd_switch()
551 gd_update_windowsize(vc); in gd_switch()
553 gd_update_full_redraw(vc); in gd_switch()
572 VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl); in gd_has_dmabuf() local
574 if (gtk_use_gl_area && !gtk_widget_get_realized(vc->gfx.drawing_area)) { in gd_has_dmabuf()
580 return vc->gfx.has_dmabuf; in gd_has_dmabuf()
587 VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl); in gd_gl_release_dmabuf() local
590 if (vc->gfx.guest_fb.dmabuf == dmabuf) { in gd_gl_release_dmabuf()
591 vc->gfx.guest_fb.dmabuf = NULL; in gd_gl_release_dmabuf()
598 VirtualConsole *vc = vcon; in gd_hw_gl_flushed() local
599 QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf; in gd_hw_gl_flushed()
607 graphic_hw_gl_block(vc->gfx.dcl.con, false); in gd_hw_gl_flushed()
706 VirtualConsole *vc = &s->vc[i]; in gd_mouse_mode_change() local
707 gd_update_cursor(vc); in gd_mouse_mode_change()
730 static void gd_set_ui_refresh_rate(VirtualConsole *vc, int refresh_rate) in gd_set_ui_refresh_rate() argument
734 if (!dpy_ui_info_supported(vc->gfx.dcl.con)) { in gd_set_ui_refresh_rate()
738 info = *dpy_get_ui_info(vc->gfx.dcl.con); in gd_set_ui_refresh_rate()
740 dpy_set_ui_info(vc->gfx.dcl.con, &info, true); in gd_set_ui_refresh_rate()
743 static void gd_set_ui_size(VirtualConsole *vc, gint width, gint height) in gd_set_ui_size() argument
747 if (!dpy_ui_info_supported(vc->gfx.dcl.con)) { in gd_set_ui_size()
751 info = *dpy_get_ui_info(vc->gfx.dcl.con); in gd_set_ui_size()
754 dpy_set_ui_info(vc->gfx.dcl.con, &info, true); in gd_set_ui_size()
762 VirtualConsole *vc = opaque; in gd_render_event() local
764 if (vc->gfx.gls) { in gd_render_event()
765 gd_gl_area_draw(vc); in gd_render_event()
773 VirtualConsole *vc = (void *)opaque; in gd_resize_event() local
775 gd_set_ui_size(vc, width, height); in gd_resize_event()
780 void gd_update_monitor_refresh_rate(VirtualConsole *vc, GtkWidget *widget) in gd_update_monitor_refresh_rate() argument
794 gd_set_ui_refresh_rate(vc, refresh_rate); in gd_update_monitor_refresh_rate()
797 vc->gfx.dcl.update_interval = refresh_rate ? in gd_update_monitor_refresh_rate()
805 VirtualConsole *vc = opaque; in gd_draw_event() local
806 GtkDisplayState *s = vc->s; in gd_draw_event()
812 if (vc->gfx.gls) { in gd_draw_event()
818 gd_egl_draw(vc); in gd_draw_event()
830 if (!vc->gfx.ds) { in gd_draw_event()
833 if (!vc->gfx.surface) { in gd_draw_event()
837 gd_update_monitor_refresh_rate(vc, vc->window ? vc->window : s->window); in gd_draw_event()
839 fbw = surface_width(vc->gfx.ds); in gd_draw_event()
840 fbh = surface_height(vc->gfx.ds); in gd_draw_event()
846 vc->gfx.scale_x = (double)ww / fbw; in gd_draw_event()
847 vc->gfx.scale_y = (double)wh / fbh; in gd_draw_event()
854 vc->gfx.scale_x = vc->gfx.scale_y = MIN(sx, sy); in gd_draw_event()
857 fbw *= vc->gfx.scale_x; in gd_draw_event()
858 fbh *= vc->gfx.scale_y; in gd_draw_event()
879 cairo_scale(cr, vc->gfx.scale_x, vc->gfx.scale_y); in gd_draw_event()
880 cairo_set_source_surface(cr, vc->gfx.surface, in gd_draw_event()
881 mx / vc->gfx.scale_x, my / vc->gfx.scale_y); in gd_draw_event()
890 VirtualConsole *vc = opaque; in gd_motion_event() local
891 GtkDisplayState *s = vc->s; in gd_motion_event()
897 if (!vc->gfx.ds) { in gd_motion_event()
901 fbw = surface_width(vc->gfx.ds) * vc->gfx.scale_x; in gd_motion_event()
902 fbh = surface_height(vc->gfx.ds) * vc->gfx.scale_y; in gd_motion_event()
908 * In such cases, some paddings are needed around the `vc`. in gd_motion_event()
909 * To achieve that, `vc` will be displayed at (mx, my) in gd_motion_event()
922 * so translating it to the coordinates in `vc`. in gd_motion_event()
924 x = (motion->x - mx) / vc->gfx.scale_x; in gd_motion_event()
925 y = (motion->y - my) / vc->gfx.scale_y; in gd_motion_event()
929 if (qemu_input_is_absolute(vc->gfx.dcl.con)) { in gd_motion_event()
931 x >= surface_width(vc->gfx.ds) || in gd_motion_event()
932 y >= surface_height(vc->gfx.ds)) { in gd_motion_event()
935 qemu_input_queue_abs(vc->gfx.dcl.con, INPUT_AXIS_X, x, in gd_motion_event()
936 0, surface_width(vc->gfx.ds)); in gd_motion_event()
937 qemu_input_queue_abs(vc->gfx.dcl.con, INPUT_AXIS_Y, y, in gd_motion_event()
938 0, surface_height(vc->gfx.ds)); in gd_motion_event()
940 } else if (s->last_set && s->ptr_owner == vc) { in gd_motion_event()
941 qemu_input_queue_rel(vc->gfx.dcl.con, INPUT_AXIS_X, x - s->last_x); in gd_motion_event()
942 qemu_input_queue_rel(vc->gfx.dcl.con, INPUT_AXIS_Y, y - s->last_y); in gd_motion_event()
949 if (!qemu_input_is_absolute(vc->gfx.dcl.con) && s->ptr_owner == vc) { in gd_motion_event()
950 GdkScreen *screen = gtk_widget_get_screen(vc->gfx.drawing_area); in gd_motion_event()
985 VirtualConsole *vc = opaque; in gd_button_event() local
986 GtkDisplayState *s = vc->s; in gd_button_event()
991 !qemu_input_is_absolute(vc->gfx.dcl.con) && s->ptr_owner != vc) { in gd_button_event()
992 if (!vc->window) { in gd_button_event()
996 gd_grab_pointer(vc, "relative-mode-click"); in gd_button_event()
1019 qemu_input_queue_btn(vc->gfx.dcl.con, btn, in gd_button_event()
1028 VirtualConsole *vc = opaque; in gd_scroll_event() local
1073 qemu_input_queue_btn(vc->gfx.dcl.con, btn_vertical, true); in gd_scroll_event()
1075 qemu_input_queue_btn(vc->gfx.dcl.con, btn_vertical, false); in gd_scroll_event()
1080 qemu_input_queue_btn(vc->gfx.dcl.con, btn_horizontal, true); in gd_scroll_event()
1082 qemu_input_queue_btn(vc->gfx.dcl.con, btn_horizontal, false); in gd_scroll_event()
1093 VirtualConsole *vc = opaque; in gd_touch_event() local
1113 console_handle_touch_event(vc->gfx.dcl.con, touch_slots, in gd_touch_event()
1114 num_slot, surface_width(vc->gfx.ds), in gd_touch_event()
1115 surface_height(vc->gfx.ds), touch->x, in gd_touch_event()
1212 VirtualConsole *vc = opaque; in gd_text_key_down() local
1213 QemuTextConsole *con = QEMU_TEXT_CONSOLE(vc->gfx.dcl.con); in gd_text_key_down()
1228 VirtualConsole *vc = opaque; in gd_key_event() local
1236 if (!vc->s->kbd_owner) { in gd_key_event()
1252 qkbd_state_key_event(vc->gfx.kbd, Q_KEY_CODE_PAUSE, in gd_key_event()
1260 trace_gd_key_event(vc->label, keycode, qcode, in gd_key_event()
1263 qkbd_state_key_event(vc->gfx.kbd, qcode, in gd_key_event()
1279 VirtualConsole *vc = opaque; in gd_grab_broken_event() local
1280 GtkDisplayState *s = vc->s; in gd_grab_broken_event()
1330 VirtualConsole *vc = gd_vc_find_by_menu(s); in gd_menu_switch_vc() local
1335 if (vc) { in gd_menu_switch_vc()
1336 page = gtk_notebook_page_num(nb, vc->tab_item); in gd_menu_switch_vc()
1338 gtk_widget_grab_focus(vc->focus); in gd_menu_switch_vc()
1344 VirtualConsole *vc = opaque; in gd_accel_switch_vc() local
1346 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->menu_item), TRUE); in gd_accel_switch_vc()
1352 VirtualConsole *vc = gd_vc_find_current(s); in gd_menu_show_tabs() local
1359 gd_update_windowsize(vc); in gd_menu_show_tabs()
1365 VirtualConsole *vc = opaque; in gd_tab_window_close() local
1366 GtkDisplayState *s = vc->s; in gd_tab_window_close()
1368 gtk_widget_set_sensitive(vc->menu_item, true); in gd_tab_window_close()
1369 gd_widget_reparent(vc->window, s->notebook, vc->tab_item); in gd_tab_window_close()
1371 vc->tab_item, vc->label); in gd_tab_window_close()
1372 gtk_widget_destroy(vc->window); in gd_tab_window_close()
1373 vc->window = NULL; in gd_tab_window_close()
1375 if (vc->gfx.esurface) { in gd_tab_window_close()
1376 eglDestroySurface(qemu_egl_display, vc->gfx.esurface); in gd_tab_window_close()
1377 vc->gfx.esurface = NULL; in gd_tab_window_close()
1379 if (vc->gfx.ectx) { in gd_tab_window_close()
1380 eglDestroyContext(qemu_egl_display, vc->gfx.ectx); in gd_tab_window_close()
1381 vc->gfx.ectx = NULL; in gd_tab_window_close()
1389 VirtualConsole *vc = opaque; in gd_win_grab() local
1391 fprintf(stderr, "%s: %s\n", __func__, vc->label); in gd_win_grab()
1392 if (vc->s->ptr_owner) { in gd_win_grab()
1393 gd_ungrab_pointer(vc->s); in gd_win_grab()
1395 gd_grab_pointer(vc, "user-request-detached-tab"); in gd_win_grab()
1403 VirtualConsole *vc = gd_vc_find_current(s); in gd_menu_untabify() local
1405 if (vc->type == GD_VC_GFX && in gd_menu_untabify()
1406 qemu_console_is_graphic(vc->gfx.dcl.con)) { in gd_menu_untabify()
1410 if (!vc->window) { in gd_menu_untabify()
1411 gtk_widget_set_sensitive(vc->menu_item, false); in gd_menu_untabify()
1412 vc->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); in gd_menu_untabify()
1414 if (vc->gfx.esurface) { in gd_menu_untabify()
1415 eglDestroySurface(qemu_egl_display, vc->gfx.esurface); in gd_menu_untabify()
1416 vc->gfx.esurface = NULL; in gd_menu_untabify()
1418 if (vc->gfx.ectx) { in gd_menu_untabify()
1419 eglDestroyContext(qemu_egl_display, vc->gfx.ectx); in gd_menu_untabify()
1420 vc->gfx.ectx = NULL; in gd_menu_untabify()
1423 gd_widget_reparent(s->notebook, vc->window, vc->tab_item); in gd_menu_untabify()
1425 g_signal_connect(vc->window, "delete-event", in gd_menu_untabify()
1426 G_CALLBACK(gd_tab_window_close), vc); in gd_menu_untabify()
1427 gtk_widget_show_all(vc->window); in gd_menu_untabify()
1429 if (qemu_console_is_graphic(vc->gfx.dcl.con)) { in gd_menu_untabify()
1431 gtk_window_add_accel_group(GTK_WINDOW(vc->window), ag); in gd_menu_untabify()
1434 vc, NULL); in gd_menu_untabify()
1438 gd_update_geometry_hints(vc); in gd_menu_untabify()
1446 VirtualConsole *vc = gd_vc_find_current(s); in gd_menu_show_menubar() local
1458 gd_update_windowsize(vc); in gd_menu_show_menubar()
1470 VirtualConsole *vc = gd_vc_find_current(s); in gd_menu_full_screen() local
1475 if (vc->type == GD_VC_GFX) { in gd_menu_full_screen()
1476 gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1); in gd_menu_full_screen()
1488 if (vc->type == GD_VC_GFX) { in gd_menu_full_screen()
1489 vc->gfx.scale_x = 1.0; in gd_menu_full_screen()
1490 vc->gfx.scale_y = 1.0; in gd_menu_full_screen()
1491 gd_update_windowsize(vc); in gd_menu_full_screen()
1495 gd_update_cursor(vc); in gd_menu_full_screen()
1507 VirtualConsole *vc = gd_vc_find_current(s); in gd_menu_zoom_in() local
1512 vc->gfx.scale_x += VC_SCALE_STEP; in gd_menu_zoom_in()
1513 vc->gfx.scale_y += VC_SCALE_STEP; in gd_menu_zoom_in()
1515 gd_update_windowsize(vc); in gd_menu_zoom_in()
1527 VirtualConsole *vc = gd_vc_find_current(s); in gd_menu_zoom_out() local
1532 vc->gfx.scale_x -= VC_SCALE_STEP; in gd_menu_zoom_out()
1533 vc->gfx.scale_y -= VC_SCALE_STEP; in gd_menu_zoom_out()
1535 vc->gfx.scale_x = MAX(vc->gfx.scale_x, VC_SCALE_MIN); in gd_menu_zoom_out()
1536 vc->gfx.scale_y = MAX(vc->gfx.scale_y, VC_SCALE_MIN); in gd_menu_zoom_out()
1538 gd_update_windowsize(vc); in gd_menu_zoom_out()
1544 VirtualConsole *vc = gd_vc_find_current(s); in gd_menu_zoom_fixed() local
1546 vc->gfx.scale_x = 1.0; in gd_menu_zoom_fixed()
1547 vc->gfx.scale_y = 1.0; in gd_menu_zoom_fixed()
1549 gd_update_windowsize(vc); in gd_menu_zoom_fixed()
1555 VirtualConsole *vc = gd_vc_find_current(s); in gd_menu_zoom_fit() local
1561 vc->gfx.scale_x = 1.0; in gd_menu_zoom_fit()
1562 vc->gfx.scale_y = 1.0; in gd_menu_zoom_fit()
1565 gd_update_windowsize(vc); in gd_menu_zoom_fit()
1566 gd_update_full_redraw(vc); in gd_menu_zoom_fit()
1569 static void gd_grab_update(VirtualConsole *vc, bool kbd, bool ptr) in gd_grab_update() argument
1571 GdkDisplay *display = gtk_widget_get_display(vc->gfx.drawing_area); in gd_grab_update()
1573 GdkWindow *window = gtk_widget_get_window(vc->gfx.drawing_area); in gd_grab_update()
1582 cursor = vc->s->null_cursor; in gd_grab_update()
1593 static void gd_grab_keyboard(VirtualConsole *vc, const char *reason) in gd_grab_keyboard() argument
1595 if (vc->s->kbd_owner) { in gd_grab_keyboard()
1596 if (vc->s->kbd_owner == vc) { in gd_grab_keyboard()
1599 gd_ungrab_keyboard(vc->s); in gd_grab_keyboard()
1604 gd_grab_update(vc, true, vc->s->ptr_owner == vc); in gd_grab_keyboard()
1605 vc->s->kbd_owner = vc; in gd_grab_keyboard()
1606 gd_update_caption(vc->s); in gd_grab_keyboard()
1607 trace_gd_grab(vc->label, "kbd", reason); in gd_grab_keyboard()
1612 VirtualConsole *vc = s->kbd_owner; in gd_ungrab_keyboard() local
1614 if (vc == NULL) { in gd_ungrab_keyboard()
1620 gd_grab_update(vc, false, vc->s->ptr_owner == vc); in gd_ungrab_keyboard()
1622 trace_gd_ungrab(vc->label, "kbd"); in gd_ungrab_keyboard()
1625 static void gd_grab_pointer(VirtualConsole *vc, const char *reason) in gd_grab_pointer() argument
1627 GdkDisplay *display = gtk_widget_get_display(vc->gfx.drawing_area); in gd_grab_pointer()
1629 if (vc->s->ptr_owner) { in gd_grab_pointer()
1630 if (vc->s->ptr_owner == vc) { in gd_grab_pointer()
1633 gd_ungrab_pointer(vc->s); in gd_grab_pointer()
1637 gd_grab_update(vc, vc->s->kbd_owner == vc, true); in gd_grab_pointer()
1639 NULL, &vc->s->grab_x_root, &vc->s->grab_y_root); in gd_grab_pointer()
1640 vc->s->ptr_owner = vc; in gd_grab_pointer()
1641 gd_update_caption(vc->s); in gd_grab_pointer()
1642 trace_gd_grab(vc->label, "ptr", reason); in gd_grab_pointer()
1647 VirtualConsole *vc = s->ptr_owner; in gd_ungrab_pointer() local
1650 if (vc == NULL) { in gd_ungrab_pointer()
1655 display = gtk_widget_get_display(vc->gfx.drawing_area); in gd_ungrab_pointer()
1656 gd_grab_update(vc, vc->s->kbd_owner == vc, false); in gd_ungrab_pointer()
1658 gtk_widget_get_screen(vc->gfx.drawing_area), in gd_ungrab_pointer()
1659 vc->s->grab_x_root, vc->s->grab_y_root); in gd_ungrab_pointer()
1661 trace_gd_ungrab(vc->label, "ptr"); in gd_ungrab_pointer()
1667 VirtualConsole *vc = gd_vc_find_current(s); in gd_menu_grab_input() local
1670 gd_grab_keyboard(vc, "user-request-main-window"); in gd_menu_grab_input()
1671 gd_grab_pointer(vc, "user-request-main-window"); in gd_menu_grab_input()
1677 gd_update_cursor(vc); in gd_menu_grab_input()
1684 VirtualConsole *vc; in gd_change_page() local
1691 vc = gd_vc_find_by_page(s, arg2); in gd_change_page()
1692 if (!vc) { in gd_change_page()
1695 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->menu_item), in gd_change_page()
1697 on_vga = (vc->type == GD_VC_GFX && in gd_change_page()
1698 qemu_console_is_graphic(vc->gfx.dcl.con)); in gd_change_page()
1708 gtk_widget_set_sensitive(s->copy_item, vc->type == GD_VC_VTE); in gd_change_page()
1711 gd_update_windowsize(vc); in gd_change_page()
1712 gd_update_cursor(vc); in gd_change_page()
1718 VirtualConsole *vc = opaque; in gd_enter_event() local
1719 GtkDisplayState *s = vc->s; in gd_enter_event()
1722 gd_grab_keyboard(vc, "grab-on-hover"); in gd_enter_event()
1730 VirtualConsole *vc = opaque; in gd_leave_event() local
1731 GtkDisplayState *s = vc->s; in gd_leave_event()
1742 VirtualConsole *vc = opaque; in gd_focus_in_event() local
1744 win32_kbd_set_window(gd_win32_get_hwnd(vc)); in gd_focus_in_event()
1751 VirtualConsole *vc = opaque; in gd_focus_out_event() local
1752 GtkDisplayState *s = vc->s; in gd_focus_out_event()
1762 VirtualConsole *vc = opaque; in gd_configure() local
1764 gd_set_ui_size(vc, cfg->width, cfg->height); in gd_configure()
1770 static GSList *gd_vc_menu_init(GtkDisplayState *s, VirtualConsole *vc, in gd_vc_menu_init() argument
1773 vc->menu_item = gtk_radio_menu_item_new_with_mnemonic(group, vc->label); in gd_vc_menu_init()
1776 g_cclosure_new_swap(G_CALLBACK(gd_accel_switch_vc), vc, NULL)); in gd_vc_menu_init()
1778 GTK_ACCEL_LABEL(gtk_bin_get_child(GTK_BIN(vc->menu_item))), in gd_vc_menu_init()
1781 g_signal_connect(vc->menu_item, "activate", in gd_vc_menu_init()
1783 gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), vc->menu_item); in gd_vc_menu_init()
1785 return gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(vc->menu_item)); in gd_vc_menu_init()
1792 VirtualConsole *vc = gd_vc_find_current(s); in gd_menu_copy() local
1795 vte_terminal_copy_clipboard_format(VTE_TERMINAL(vc->vte.terminal), in gd_menu_copy()
1798 vte_terminal_copy_clipboard(VTE_TERMINAL(vc->vte.terminal)); in gd_menu_copy()
1804 VirtualConsole *vc = opaque; in gd_vc_adjustment_changed() local
1808 gtk_widget_show(vc->vte.scrollbar); in gd_vc_adjustment_changed()
1810 gtk_widget_hide(vc->vte.scrollbar); in gd_vc_adjustment_changed()
1814 static void gd_vc_send_chars(VirtualConsole *vc) in gd_vc_send_chars() argument
1818 len = qemu_chr_be_can_write(vc->vte.chr); in gd_vc_send_chars()
1819 avail = fifo8_num_used(&vc->vte.out_fifo); in gd_vc_send_chars()
1824 buf = fifo8_pop_bufptr(&vc->vte.out_fifo, MIN(len, avail), &size); in gd_vc_send_chars()
1825 qemu_chr_be_write(vc->vte.chr, buf, size); in gd_vc_send_chars()
1826 len = qemu_chr_be_can_write(vc->vte.chr); in gd_vc_send_chars()
1834 VirtualConsole *vc = vcd->console; in gd_vc_chr_write() local
1836 vte_terminal_feed(VTE_TERMINAL(vc->vte.terminal), (const char *)buf, len); in gd_vc_chr_write()
1843 VirtualConsole *vc = vcd->console; in gd_vc_chr_accept_input() local
1845 if (vc) { in gd_vc_chr_accept_input()
1846 gd_vc_send_chars(vc); in gd_vc_chr_accept_input()
1853 VirtualConsole *vc = vcd->console; in gd_vc_chr_set_echo() local
1855 if (vc) { in gd_vc_chr_set_echo()
1856 vc->vte.echo = echo; in gd_vc_chr_set_echo()
1902 VirtualConsole *vc = user_data; in gd_vc_in() local
1905 if (vc->vte.echo) { in gd_vc_in()
1906 VteTerminal *term = VTE_TERMINAL(vc->vte.terminal); in gd_vc_in()
1923 free = fifo8_num_free(&vc->vte.out_fifo); in gd_vc_in()
1924 fifo8_push_all(&vc->vte.out_fifo, (uint8_t *)text, MIN(free, size)); in gd_vc_in()
1925 gd_vc_send_chars(vc); in gd_vc_in()
1930 static GSList *gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc, in gd_vc_vte_init() argument
1940 vc->s = s; in gd_vc_vte_init()
1941 vc->vte.echo = vcd->echo; in gd_vc_vte_init()
1942 vc->vte.chr = chr; in gd_vc_vte_init()
1943 fifo8_create(&vc->vte.out_fifo, 4096); in gd_vc_vte_init()
1944 vcd->console = vc; in gd_vc_vte_init()
1946 snprintf(buffer, sizeof(buffer), "vc%d", idx); in gd_vc_vte_init()
1947 vc->label = g_strdup(vc->vte.chr->label ? : buffer); in gd_vc_vte_init()
1948 group = gd_vc_menu_init(s, vc, idx, group, view_menu); in gd_vc_vte_init()
1950 vc->vte.terminal = vte_terminal_new(); in gd_vc_vte_init()
1951 g_signal_connect(vc->vte.terminal, "commit", G_CALLBACK(gd_vc_in), vc); in gd_vc_vte_init()
1958 vte_terminal_set_encoding(VTE_TERMINAL(vc->vte.terminal), "UTF-8", NULL); in gd_vc_vte_init()
1960 vte_terminal_set_encoding(VTE_TERMINAL(vc->vte.terminal), "UTF-8"); in gd_vc_vte_init()
1964 vte_terminal_set_scrollback_lines(VTE_TERMINAL(vc->vte.terminal), -1); in gd_vc_vte_init()
1965 vte_terminal_set_size(VTE_TERMINAL(vc->vte.terminal), in gd_vc_vte_init()
1970 (GTK_SCROLLABLE(vc->vte.terminal)); in gd_vc_vte_init()
1972 vadjustment = vte_terminal_get_adjustment(VTE_TERMINAL(vc->vte.terminal)); in gd_vc_vte_init()
1979 gtk_box_pack_end(GTK_BOX(box), vc->vte.terminal, TRUE, TRUE, 0); in gd_vc_vte_init()
1981 vc->vte.box = box; in gd_vc_vte_init()
1982 vc->vte.scrollbar = scrollbar; in gd_vc_vte_init()
1985 G_CALLBACK(gd_vc_adjustment_changed), vc); in gd_vc_vte_init()
1987 vc->type = GD_VC_VTE; in gd_vc_vte_init()
1988 vc->tab_item = box; in gd_vc_vte_init()
1989 vc->focus = vc->vte.terminal; in gd_vc_vte_init()
1990 gtk_notebook_append_page(GTK_NOTEBOOK(s->notebook), vc->tab_item, in gd_vc_vte_init()
1991 gtk_label_new(vc->label)); in gd_vc_vte_init()
1993 qemu_chr_be_event(vc->vte.chr, CHR_EVENT_OPENED); in gd_vc_vte_init()
2004 VirtualConsole *vc = &s->vc[s->nb_vcs]; in gd_vcs_init() local
2005 group = gd_vc_vte_init(s, vc, vcs[i], s->nb_vcs, group, view_menu); in gd_vcs_init()
2013 static void gd_connect_vc_gfx_signals(VirtualConsole *vc) in gd_connect_vc_gfx_signals() argument
2015 g_signal_connect(vc->gfx.drawing_area, "draw", in gd_connect_vc_gfx_signals()
2016 G_CALLBACK(gd_draw_event), vc); in gd_connect_vc_gfx_signals()
2020 g_signal_connect(vc->gfx.drawing_area, "render", in gd_connect_vc_gfx_signals()
2021 G_CALLBACK(gd_render_event), vc); in gd_connect_vc_gfx_signals()
2022 g_signal_connect(vc->gfx.drawing_area, "resize", in gd_connect_vc_gfx_signals()
2023 G_CALLBACK(gd_resize_event), vc); in gd_connect_vc_gfx_signals()
2026 if (qemu_console_is_graphic(vc->gfx.dcl.con)) { in gd_connect_vc_gfx_signals()
2027 g_signal_connect(vc->gfx.drawing_area, "event", in gd_connect_vc_gfx_signals()
2028 G_CALLBACK(gd_event), vc); in gd_connect_vc_gfx_signals()
2029 g_signal_connect(vc->gfx.drawing_area, "button-press-event", in gd_connect_vc_gfx_signals()
2030 G_CALLBACK(gd_button_event), vc); in gd_connect_vc_gfx_signals()
2031 g_signal_connect(vc->gfx.drawing_area, "button-release-event", in gd_connect_vc_gfx_signals()
2032 G_CALLBACK(gd_button_event), vc); in gd_connect_vc_gfx_signals()
2033 g_signal_connect(vc->gfx.drawing_area, "scroll-event", in gd_connect_vc_gfx_signals()
2034 G_CALLBACK(gd_scroll_event), vc); in gd_connect_vc_gfx_signals()
2035 g_signal_connect(vc->gfx.drawing_area, "key-press-event", in gd_connect_vc_gfx_signals()
2036 G_CALLBACK(gd_key_event), vc); in gd_connect_vc_gfx_signals()
2037 g_signal_connect(vc->gfx.drawing_area, "key-release-event", in gd_connect_vc_gfx_signals()
2038 G_CALLBACK(gd_key_event), vc); in gd_connect_vc_gfx_signals()
2039 g_signal_connect(vc->gfx.drawing_area, "touch-event", in gd_connect_vc_gfx_signals()
2040 G_CALLBACK(gd_touch_event), vc); in gd_connect_vc_gfx_signals()
2042 g_signal_connect(vc->gfx.drawing_area, "enter-notify-event", in gd_connect_vc_gfx_signals()
2043 G_CALLBACK(gd_enter_event), vc); in gd_connect_vc_gfx_signals()
2044 g_signal_connect(vc->gfx.drawing_area, "leave-notify-event", in gd_connect_vc_gfx_signals()
2045 G_CALLBACK(gd_leave_event), vc); in gd_connect_vc_gfx_signals()
2046 g_signal_connect(vc->gfx.drawing_area, "focus-in-event", in gd_connect_vc_gfx_signals()
2047 G_CALLBACK(gd_focus_in_event), vc); in gd_connect_vc_gfx_signals()
2048 g_signal_connect(vc->gfx.drawing_area, "focus-out-event", in gd_connect_vc_gfx_signals()
2049 G_CALLBACK(gd_focus_out_event), vc); in gd_connect_vc_gfx_signals()
2050 g_signal_connect(vc->gfx.drawing_area, "configure-event", in gd_connect_vc_gfx_signals()
2051 G_CALLBACK(gd_configure), vc); in gd_connect_vc_gfx_signals()
2052 g_signal_connect(vc->gfx.drawing_area, "grab-broken-event", in gd_connect_vc_gfx_signals()
2053 G_CALLBACK(gd_grab_broken_event), vc); in gd_connect_vc_gfx_signals()
2055 g_signal_connect(vc->gfx.drawing_area, "key-press-event", in gd_connect_vc_gfx_signals()
2056 G_CALLBACK(gd_text_key_down), vc); in gd_connect_vc_gfx_signals()
2134 static void gl_area_realize(GtkGLArea *area, VirtualConsole *vc) in gl_area_realize() argument
2138 vc->gfx.has_dmabuf = qemu_egl_has_dmabuf(); in gl_area_realize()
2139 if (!vc->gfx.has_dmabuf) { in gl_area_realize()
2145 static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc, in gd_vc_gfx_init() argument
2152 vc->label = qemu_console_get_label(con); in gd_vc_gfx_init()
2153 vc->s = s; in gd_vc_gfx_init()
2154 vc->gfx.scale_x = 1.0; in gd_vc_gfx_init()
2155 vc->gfx.scale_y = 1.0; in gd_vc_gfx_init()
2160 vc->gfx.drawing_area = gtk_gl_area_new(); in gd_vc_gfx_init()
2161 g_signal_connect(vc->gfx.drawing_area, "realize", in gd_vc_gfx_init()
2162 G_CALLBACK(gl_area_realize), vc); in gd_vc_gfx_init()
2163 vc->gfx.dcl.ops = &dcl_gl_area_ops; in gd_vc_gfx_init()
2164 vc->gfx.dgc.ops = &gl_area_ctx_ops; in gd_vc_gfx_init()
2167 vc->gfx.drawing_area = gtk_drawing_area_new(); in gd_vc_gfx_init()
2176 gtk_widget_set_double_buffered(vc->gfx.drawing_area, FALSE); in gd_vc_gfx_init()
2178 vc->gfx.dcl.ops = &dcl_egl_ops; in gd_vc_gfx_init()
2179 vc->gfx.dgc.ops = &egl_ctx_ops; in gd_vc_gfx_init()
2180 vc->gfx.has_dmabuf = qemu_egl_has_dmabuf(); in gd_vc_gfx_init()
2188 vc->gfx.drawing_area = gtk_drawing_area_new(); in gd_vc_gfx_init()
2189 vc->gfx.dcl.ops = &dcl_ops; in gd_vc_gfx_init()
2193 gtk_widget_add_events(vc->gfx.drawing_area, in gd_vc_gfx_init()
2204 gtk_widget_set_can_focus(vc->gfx.drawing_area, TRUE); in gd_vc_gfx_init()
2206 vc->type = GD_VC_GFX; in gd_vc_gfx_init()
2207 vc->tab_item = vc->gfx.drawing_area; in gd_vc_gfx_init()
2208 vc->focus = vc->gfx.drawing_area; in gd_vc_gfx_init()
2210 vc->tab_item, gtk_label_new(vc->label)); in gd_vc_gfx_init()
2212 vc->gfx.kbd = qkbd_state_init(con); in gd_vc_gfx_init()
2213 vc->gfx.dcl.con = con; in gd_vc_gfx_init()
2216 qemu_console_set_display_gl_ctx(con, &vc->gfx.dgc); in gd_vc_gfx_init()
2218 register_displaychangelistener(&vc->gfx.dcl); in gd_vc_gfx_init()
2220 gd_connect_vc_gfx_signals(vc); in gd_vc_gfx_init()
2221 group = gd_vc_menu_init(s, vc, idx, group, view_menu); in gd_vc_gfx_init()
2223 if (dpy_ui_info_supported(vc->gfx.dcl.con)) { in gd_vc_gfx_init()
2248 int vc; in gd_create_menu_view() local
2313 for (vc = 0;; vc++) { in gd_create_menu_view()
2314 con = qemu_console_lookup_by_index(vc); in gd_create_menu_view()
2318 group = gd_vc_gfx_init(s, &s->vc[vc], con, in gd_create_menu_view()
2319 vc, group, view_menu); in gd_create_menu_view()
2382 VirtualConsole *vc; in gtk_display_init() local
2458 gtk_widget_realize(s->vc[idx].gfx.drawing_area); in gtk_display_init()
2466 vc = gd_vc_find_current(s); in gtk_display_init()
2467 gtk_widget_set_sensitive(s->view_menu, vc != NULL); in gtk_display_init()
2470 vc && vc->type == GD_VC_VTE); in gtk_display_init()
2554 .vc = "vc",