static gboolean gdk_win32_display_request_selection_notification (GdkDisplay *display, GdkAtom selection) { GdkWin32Display *display_win32 = GDK_WIN32_DISPLAY (display); gboolean ret = FALSE; GDK_NOTE (DND, g_print ("gdk_display_request_selection_notification (..., %s)", gdk_atom_name (selection))); if (selection == GDK_SELECTION_CLIPBOARD || selection == GDK_SELECTION_PRIMARY) { if (display_win32->clipboard_hwnd == NULL) { if (register_clipboard_notification (display)) GDK_NOTE (DND, g_print (" registered")); else GDK_NOTE (DND, g_print (" failed to register")); } ret = (display_win32->clipboard_hwnd != NULL); } else { GDK_NOTE (DND, g_print (" unsupported")); ret = FALSE; } GDK_NOTE (DND, g_print (" -> %s\n", ret ? "TRUE" : "FALSE")); return ret; }
static gboolean gdk_win32_display_request_selection_notification (GdkDisplay *display, GdkAtom selection) { static HWND hwndViewer = NULL; gboolean ret = FALSE; GDK_NOTE (DND, g_print ("gdk_display_request_selection_notification (..., %s)", gdk_atom_name (selection))); if (selection == GDK_SELECTION_CLIPBOARD || selection == GDK_SELECTION_PRIMARY) { if (!hwndViewer) { hwndViewer = _gdk_win32_register_clipboard_notification (); GDK_NOTE (DND, g_print (" registered")); } ret = (hwndViewer != NULL); } else { GDK_NOTE (DND, g_print (" unsupported")); ret = FALSE; } GDK_NOTE (DND, g_print (" -> %s\n", ret ? "TRUE" : "FALSE")); return ret; }
gint gdk_selection_property_get(GdkWindow * requestor, guchar ** data, GdkAtom * ret_type, gint * ret_format) { GdkSelProp *prop; g_return_val_if_fail(requestor != NULL, 0); g_return_val_if_fail(GDK_IS_WINDOW(requestor), 0); if (GDK_DRAWABLE_DESTROYED(requestor)) return 0; GDK_NOTE(DND, g_print("gdk_selection_property_get: %#x", GDK_DRAWABLE_XID(requestor))); prop = g_hash_table_lookup(sel_prop_table, &GDK_DRAWABLE_XID(requestor)); if (prop == NULL) { GDK_NOTE(DND, g_print(": NULL\n")); *data = NULL; return 0; } GDK_NOTE(DND, g_print(": %d bytes\n", prop->length)); *data = g_malloc(prop->length); if (prop->length > 0) memmove(*data, prop->data, prop->length); if (ret_type) *ret_type = prop->type; if (ret_format) *ret_format = prop->format; return prop->length; }
void _gdk_monitor_init (void) { #ifdef HAVE_MONITOR_INFO gint i, index; _gdk_num_monitors = 0; EnumDisplayMonitors (NULL, NULL, count_monitor, (LPARAM) &_gdk_num_monitors); _gdk_monitors = g_renew (GdkWin32Monitor, _gdk_monitors, _gdk_num_monitors); index = 0; EnumDisplayMonitors (NULL, NULL, enum_monitor, (LPARAM) &index); _gdk_offset_x = G_MININT; _gdk_offset_y = G_MININT; /* Calculate offset */ for (i = 0; i < _gdk_num_monitors; i++) { _gdk_offset_x = MAX (_gdk_offset_x, -_gdk_monitors[i].rect.x); _gdk_offset_y = MAX (_gdk_offset_y, -_gdk_monitors[i].rect.y); } GDK_NOTE (MISC, g_print ("Multi-monitor offset: (%d,%d)\n", _gdk_offset_x, _gdk_offset_y)); /* Translate monitor coords into GDK coordinate space */ for (i = 0; i < _gdk_num_monitors; i++) { _gdk_monitors[i].rect.x += _gdk_offset_x; _gdk_monitors[i].rect.y += _gdk_offset_y; GDK_NOTE (MISC, g_print ("Monitor %d: %dx%d@%+d%+d\n", i, _gdk_monitors[i].rect.width, _gdk_monitors[i].rect.height, _gdk_monitors[i].rect.x, _gdk_monitors[i].rect.y)); } #else HDC hDC; _gdk_num_monitors = 1; _gdk_monitors = g_renew (GdkWin32Monitor, _gdk_monitors, 1); _gdk_monitors[0].name = g_strdup ("DISPLAY"); hDC = GetDC (NULL); _gdk_monitors[0].width_mm = GetDeviceCaps (hDC, HORZSIZE); _gdk_monitors[0].height_mm = GetDeviceCaps (hDC, VERTSIZE); ReleaseDC (NULL, hDC); _gdk_monitors[0].rect.x = 0; _gdk_monitors[0].rect.y = 0; _gdk_monitors[0].rect.width = GetSystemMetrics (SM_CXSCREEN); _gdk_monitors[0].rect.height = GetSystemMetrics (SM_CYSCREEN); _gdk_offset_x = 0; _gdk_offset_y = 0; #endif }
GdkDisplay * _gdk_win32_display_open (const gchar *display_name) { GdkWin32Display *win32_display; GDK_NOTE (MISC, g_print ("gdk_display_open: %s\n", (display_name ? display_name : "NULL"))); if (display_name == NULL || g_ascii_strcasecmp (display_name, gdk_display_get_name (_gdk_display)) == 0) { if (_gdk_display != NULL) { GDK_NOTE (MISC, g_print ("... return _gdk_display\n")); return _gdk_display; } } else { GDK_NOTE (MISC, g_print ("... return NULL\n")); return NULL; } _gdk_display = g_object_new (GDK_TYPE_WIN32_DISPLAY, NULL); win32_display = GDK_WIN32_DISPLAY (_gdk_display); win32_display->screen = g_object_new (GDK_TYPE_WIN32_SCREEN, NULL); _gdk_events_init (_gdk_display); _gdk_input_ignore_core = 0; _gdk_device_manager = g_object_new (GDK_TYPE_DEVICE_MANAGER_WIN32, NULL); _gdk_device_manager->display = _gdk_display; _gdk_drag_init (); _gdk_drop_init (); _gdk_display->clipboard = gdk_win32_clipboard_new (_gdk_display); _gdk_display->primary_clipboard = gdk_clipboard_new (_gdk_display); /* Precalculate display name */ (void) gdk_display_get_name (_gdk_display); register_display_change_notification (_gdk_display); g_signal_emit_by_name (_gdk_display, "opened"); GDK_NOTE (MISC, g_print ("... _gdk_display now set up\n")); return _gdk_display; }
void _gdk_window_move_resize_child (GdkWindow *window, gint x, gint y, gint width, gint height) { GdkWindowImplWin32 *impl; GdkWindowObject *obj; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); obj = GDK_WINDOW_OBJECT (window); impl = GDK_WINDOW_IMPL_WIN32 (obj->impl); GDK_NOTE (MISC, g_print ("_gdk_window_move_resize_child: %s@%+d%+d %dx%d@%+d%+d\n", _gdk_win32_drawable_description (window), obj->x, obj->y, width, height, x, y)); if (width > 65535 || height > 65535) { g_warning ("Native children wider or taller than 65535 pixels are not supported."); if (width > 65535) width = 65535; if (height > 65535) height = 65535; } obj->x = x; obj->y = y; obj->width = width; obj->height = height; _gdk_win32_window_tmp_unset_parent_bg (window); _gdk_win32_window_tmp_unset_bg (window, TRUE); GDK_NOTE (MISC, g_print ("... SetWindowPos(%p,NULL,%d,%d,%d,%d," "NOACTIVATE|NOZORDER)\n", GDK_WINDOW_HWND (window), obj->x + obj->parent->abs_x, obj->y + obj->parent->abs_y, width, height)); API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL, obj->x + obj->parent->abs_x, obj->y + obj->parent->abs_y, width, height, SWP_NOACTIVATE | SWP_NOZORDER)); //_gdk_win32_window_tmp_reset_parent_bg (window); _gdk_win32_window_tmp_reset_bg (window, TRUE); }
gint gdk_selection_owner_set(GdkWindow * owner, GdkAtom selection, guint32 time, gint send_event) { gchar *sel_name; HWND xwindow; GDK_NOTE(DND, (sel_name = gdk_atom_name(selection), g_print("gdk_selection_owner_set: %#x %#x (%s)\n", (owner ? GDK_DRAWABLE_XID(owner) : 0), selection, sel_name), g_free(sel_name))); if (selection != gdk_clipboard_atom) return FALSE; if (owner != NULL) xwindow = GDK_DRAWABLE_XID(owner); else xwindow = NULL; GDK_NOTE(DND, g_print("...OpenClipboard(%#x)\n", xwindow)); if (!OpenClipboard(xwindow)) { WIN32_API_FAILED("OpenClipboard"); return FALSE; } GDK_NOTE(DND, g_print("...EmptyClipboard()\n")); if (!EmptyClipboard()) { WIN32_API_FAILED("EmptyClipboard"); CloseClipboard(); return FALSE; } #if 0 /* No delayed rendering */ if (xwindow != NULL) SetClipboardData(CF_TEXT, NULL); #endif GDK_NOTE(DND, g_print("...CloseClipboard()\n")); if (!CloseClipboard()) { WIN32_API_FAILED("CloseClipboard"); return FALSE; } if (owner != NULL) { /* Send ourselves an ersatz selection request message so that * gdk_property_change will be called to store the clipboard data. */ SendMessage(xwindow, gdk_selection_request_msg, selection, 0); } return TRUE; }
static void primary_source_send (void *data, struct gtk_primary_selection_source *source, const char *mime_type, int32_t fd) { GdkWaylandSelection *wayland_selection = data; GDK_NOTE (EVENTS, g_message ("primary source send, source = %p, mime_type = %s, fd = %d", source, mime_type, fd)); if (!mime_type || !wayland_selection->primary_owner) { close (fd); return; } if (!gdk_wayland_selection_request_target (wayland_selection, wayland_selection->primary_owner, atoms[ATOM_PRIMARY], gdk_atom_intern (mime_type, FALSE), fd)) gdk_wayland_selection_check_write (wayland_selection); }
static void data_source_cancelled (void *data, struct wl_data_source *source) { GdkWaylandSelection *wayland_selection = data; GdkDragContext *context; GdkDisplay *display; GdkAtom atom; GDK_NOTE (EVENTS, g_message ("data source cancelled, source = %p", source)); display = gdk_display_get_default (); if (source == wayland_selection->dnd_source) atom = atoms[ATOM_DND]; else if (source == wayland_selection->clipboard_source) atom = atoms[ATOM_CLIPBOARD]; else return; context = gdk_wayland_drag_context_lookup_by_data_source (source); if (context) gdk_drag_context_cancel (context, GDK_DRAG_CANCEL_ERROR); emit_selection_clear (display, atom); gdk_selection_owner_set (NULL, atom, GDK_CURRENT_TIME, TRUE); gdk_wayland_selection_unset_data_source (display, atom); }
void gdk_selection_send_notify(guint32 requestor, GdkAtom selection, GdkAtom target, GdkAtom property, guint32 time) { gchar *sel_name, *tgt_name, *prop_name; GDK_NOTE(DND, (sel_name = gdk_atom_name(selection), tgt_name = gdk_atom_name(target), prop_name = gdk_atom_name(property), g_print ("gdk_selection_send_notify: %#x %#x (%s) %#x (%s) %#x (%s)\n", requestor, selection, sel_name, target, tgt_name, property, prop_name), g_free(sel_name), g_free(tgt_name), g_free(prop_name))); /* Send ourselves a selection clear message so that gtk thinks we don't * have the selection, and will claim it anew when needed, and * we thus get a chance to store data in the Windows clipboard. * Otherwise, if a gtkeditable does a copy to clipboard several times * only the first one actually gets copied to the Windows clipboard, * as only he first one causes a call to gdk_property_change. * * Hmm, there is something fishy with this. Cut and paste inside the * same app didn't work, the gtkeditable immediately forgot the * clipboard contents in gtk_editable_selection_clear as a result of * this message. OTOH, when I changed gdk_selection_owner_get to * always return NULL, it works. Sigh. */ SendMessage((HWND) requestor, gdk_selection_clear_msg, selection, 0); }
GdkWindow *gdk_selection_owner_get(GdkAtom selection) { GdkWindow *window; gchar *sel_name; #if 0 /* XXX Hmm, gtk selections seem to work best with this. This causes * gtk to always get the clipboard contents from Windows, and not * from the editable's own stashed-away copy. */ return NULL; #else if (selection != gdk_clipboard_atom) window = NULL; else { window = gdk_window_lookup(GetClipboardOwner()); if (window == NULL) window = (GdkWindow *)GetClipboardOwner(); } #endif GDK_NOTE(DND, (sel_name = gdk_atom_name(selection), g_print("gdk_selection_owner_get: %#x (%s) = %#x\n", selection, sel_name, (window ? GDK_DRAWABLE_XID(window) : 0)), g_free(sel_name))); return window; }
void gdk_property_delete (GdkWindow *window, GdkAtom property) { g_return_if_fail (!window || GDK_IS_WINDOW (window)); if (!window) { GdkScreen *screen = gdk_screen_get_default (); window = gdk_screen_get_root_window (screen); GDK_NOTE (MULTIHEAD, g_message ("gdk_property_delete(): window is NULL\n")); } if (GDK_WINDOW_DESTROYED (window)) return; gi_atom_id_t aid; GdkDisplay *display = GDK_DISPLAY_OBJECT(_gdk_display); aid = gdk_x11_atom_to_xatom_for_display (display, property); gi_delete_property ( GDK_DRAWABLE_GIX_ID (window), aid); }
/** * gdk_parse_args: * @argc: the number of command line arguments. * @argv: (inout) (array length=argc): the array of command line arguments. * * Parse command line arguments, and store for future * use by calls to gdk_display_open(). * * Any arguments used by GDK are removed from the array and @argc and @argv are * updated accordingly. * * You shouldn’t call this function explicitly if you are using * gtk_init(), gtk_init_check(), gdk_init(), or gdk_init_check(). * * Since: 2.2 **/ void gdk_parse_args (int *argc, char ***argv) { GOptionContext *option_context; GOptionGroup *option_group; GError *error = NULL; if (gdk_initialized) return; gdk_pre_parse (); option_context = g_option_context_new (NULL); g_option_context_set_ignore_unknown_options (option_context, TRUE); g_option_context_set_help_enabled (option_context, FALSE); option_group = g_option_group_new (NULL, NULL, NULL, NULL, NULL); g_option_context_set_main_group (option_context, option_group); g_option_group_add_entries (option_group, gdk_args); if (!g_option_context_parse (option_context, argc, argv, &error)) { g_warning ("%s", error->message); g_error_free (error); } g_option_context_free (option_context); GDK_NOTE (MISC, g_message ("progname: \"%s\"", g_get_prgname ())); }
static LRESULT CALLBACK inner_display_change_window_procedure (HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { switch (message) { case WM_DESTROY: { PostQuitMessage (0); return 0; } case WM_DISPLAYCHANGE: { _gdk_monitor_init (); _gdk_root_window_size_init (); g_signal_emit_by_name (_gdk_screen, "size_changed"); return 0; } default: /* Otherwise call DefWindowProcW(). */ GDK_NOTE (EVENTS, g_print (" DefWindowProcW")); return DefWindowProc (hwnd, message, wparam, lparam); } }
static LRESULT CALLBACK inner_display_change_window_procedure (HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { switch (message) { case WM_DESTROY: { PostQuitMessage (0); return 0; } case WM_DISPLAYCHANGE: { GdkWin32Display *win32_display = GDK_WIN32_DISPLAY (_gdk_display); _gdk_win32_screen_on_displaychange_event (GDK_WIN32_SCREEN (win32_display->screen)); return 0; } default: /* Otherwise call DefWindowProcW(). */ GDK_NOTE (EVENTS, g_print (" DefWindowProcW")); return DefWindowProc (hwnd, message, wparam, lparam); } }
GdkDisplay * _gdk_wayland_display_open (const gchar *display_name) { struct wl_display *wl_display; GdkDisplay *display; GdkWaylandDisplay *display_wayland; GDK_NOTE (MISC, g_message ("opening display %s", display_name ? display_name : "")); /* If this variable is unset then wayland initialisation will surely * fail, logging a fatal error in the process. Save ourselves from * that. */ if (g_getenv ("XDG_RUNTIME_DIR") == NULL) return NULL; wl_log_set_handler_client (log_handler); wl_display = wl_display_connect (display_name); if (!wl_display) return NULL; display = g_object_new (GDK_TYPE_WAYLAND_DISPLAY, NULL); display->device_manager = _gdk_wayland_device_manager_new (display); display_wayland = GDK_WAYLAND_DISPLAY (display); display_wayland->wl_display = wl_display; display_wayland->screen = _gdk_wayland_screen_new (display); display_wayland->event_source = _gdk_wayland_display_event_source_new (display); display_wayland->known_globals = g_hash_table_new_full (NULL, NULL, NULL, g_free); _gdk_wayland_display_init_cursors (display_wayland); _gdk_wayland_display_prepare_cursor_themes (display_wayland); display_wayland->wl_registry = wl_display_get_registry (display_wayland->wl_display); wl_registry_add_listener (display_wayland->wl_registry, ®istry_listener, display_wayland); _gdk_wayland_display_async_roundtrip (display_wayland); /* Wait for initializing to complete. This means waiting for all * asynchrounous roundtrips that were triggered during initial roundtrip. */ while (g_list_length (display_wayland->async_roundtrips) > 0) { if (wl_display_dispatch (display_wayland->wl_display) < 0) { g_object_unref (display); return NULL; } } gdk_input_init (display); display_wayland->selection = gdk_wayland_selection_new (); g_signal_emit_by_name (display, "opened"); return display; }
void _gdk_windowing_init (void) { gchar buf[10]; if (getenv ("GDK_IGNORE_WINTAB") != NULL) _gdk_input_ignore_wintab = TRUE; else if (getenv ("GDK_USE_WINTAB") != NULL) _gdk_input_ignore_wintab = FALSE; if (gdk_synchronize) GdiSetBatchLimit (1); _gdk_app_hmodule = GetModuleHandle (NULL); _gdk_display_hdc = CreateDC ("DISPLAY", NULL, NULL, NULL); _gdk_input_locale = GetKeyboardLayout (0); _gdk_input_locale_is_ime = ImmIsIME (_gdk_input_locale); GetLocaleInfo (MAKELCID (LOWORD (_gdk_input_locale), SORT_DEFAULT), LOCALE_IDEFAULTANSICODEPAGE, buf, sizeof (buf)); _gdk_input_codepage = atoi (buf); GDK_NOTE (EVENTS, g_print ("input_locale:%p, codepage:%d\n", _gdk_input_locale, _gdk_input_codepage)); CoInitialize (NULL); _gdk_selection = gdk_atom_intern_static_string ("GDK_SELECTION"); _wm_transient_for = gdk_atom_intern_static_string ("WM_TRANSIENT_FOR"); _targets = gdk_atom_intern_static_string ("TARGETS"); _delete = gdk_atom_intern_static_string ("DELETE"); _save_targets = gdk_atom_intern_static_string ("SAVE_TARGETS"); _utf8_string = gdk_atom_intern_static_string ("UTF8_STRING"); _text = gdk_atom_intern_static_string ("TEXT"); _compound_text = gdk_atom_intern_static_string ("COMPOUND_TEXT"); _text_uri_list = gdk_atom_intern_static_string ("text/uri-list"); _text_html = gdk_atom_intern_static_string ("text/html"); _image_png = gdk_atom_intern_static_string ("image/png"); _image_jpeg = gdk_atom_intern_static_string ("image/jpeg"); _image_bmp = gdk_atom_intern_static_string ("image/bmp"); _image_gif = gdk_atom_intern_static_string ("image/gif"); _local_dnd = gdk_atom_intern_static_string ("LocalDndSelection"); _gdk_win32_dropfiles = gdk_atom_intern_static_string ("DROPFILES_DND"); _gdk_ole2_dnd = gdk_atom_intern_static_string ("OLE2_DND"); /* MS Office 2007, at least, offers images in common file formats * using clipboard format names like "PNG" and "JFIF". So we follow * the lead and map the GDK target name "image/png" to the clipboard * format name "PNG" etc. */ _cf_png = RegisterClipboardFormat ("PNG"); _cf_jfif = RegisterClipboardFormat ("JFIF"); _cf_gif = RegisterClipboardFormat ("GIF"); _cf_url = RegisterClipboardFormat ("UniformResourceLocatorW"); _cf_html_format = RegisterClipboardFormat ("HTML Format"); _cf_text_html = RegisterClipboardFormat ("text/html"); _gdk_win32_selection_init (); }
void gdk_property_change (GdkWindow *window, GdkAtom property, GdkAtom type, gint format, GdkPropMode mode, const guchar *data, gint nelements) { GdkDisplay *display; Window xwindow; Atom xproperty; Atom xtype; g_return_if_fail (!window || GDK_IS_WINDOW (window)); if (!window) { GdkScreen *screen; screen = gdk_screen_get_default (); window = gdk_screen_get_root_window (screen); GDK_NOTE (MULTIHEAD, g_message ("gdk_property_change(): window is NULL\n")); } if (GDK_WINDOW_DESTROYED (window)) return; display = gdk_drawable_get_display (window); xproperty = gdk_x11_atom_to_xatom_for_display (display, property); xtype = gdk_x11_atom_to_xatom_for_display (display, type); xwindow = GDK_WINDOW_XID (window); if (xtype == XA_ATOM || xtype == gdk_x11_get_xatom_by_name_for_display (display, "ATOM_PAIR")) { /* * data is an array of GdkAtom, we need to convert it * to an array of X Atoms */ gint i; GdkAtom *atoms = (GdkAtom*) data; Atom *xatoms; xatoms = g_new (Atom, nelements); for (i = 0; i < nelements; i++) xatoms[i] = gdk_x11_atom_to_xatom_for_display (display, atoms[i]); XChangeProperty (GDK_DISPLAY_XDISPLAY (display), xwindow, xproperty, xtype, format, mode, (guchar *)xatoms, nelements); g_free (xatoms); } else XChangeProperty (GDK_DISPLAY_XDISPLAY (display), xwindow, xproperty, xtype, format, mode, (guchar *)data, nelements); }
static void gdk_x11_gl_context_dispose (GObject *gobject) { GdkWaylandGLContext *context_wayland = GDK_WAYLAND_GL_CONTEXT (gobject); if (context_wayland->egl_context != NULL) { GdkGLContext *context = GDK_GL_CONTEXT (gobject); GdkWindow *window = gdk_gl_context_get_window (context); GdkDisplay *display = gdk_window_get_display (window); GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display); if (eglGetCurrentContext () == context_wayland->egl_context) eglMakeCurrent(display_wayland->egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); GDK_NOTE (OPENGL, g_print ("Destroying EGL context\n")); eglDestroyContext (display_wayland->egl_display, context_wayland->egl_context); context_wayland->egl_context = NULL; } G_OBJECT_CLASS (gdk_wayland_gl_context_parent_class)->dispose (gobject); }
GdkDisplay * _gdk_win32_display_open (const gchar *display_name) { GdkWin32Display *win32_display; GDK_NOTE (MISC, g_print ("gdk_display_open: %s\n", (display_name ? display_name : "NULL"))); if (display_name == NULL || g_ascii_strcasecmp (display_name, gdk_display_get_name (_gdk_display)) == 0) { if (_gdk_display != NULL) { GDK_NOTE (MISC, g_print ("... return _gdk_display\n")); return _gdk_display; } } else { GDK_NOTE (MISC, g_print ("... return NULL\n")); return NULL; } _gdk_display = g_object_new (GDK_TYPE_WIN32_DISPLAY, NULL); win32_display = GDK_WIN32_DISPLAY (_gdk_display); win32_display->screen = g_object_new (GDK_TYPE_WIN32_SCREEN, NULL); _gdk_monitor_init (); _gdk_visual_init (win32_display->screen); _gdk_screen_init_root_window (GDK_WIN32_SCREEN (win32_display->screen)); _gdk_events_init (); _gdk_input_init (_gdk_display); _gdk_dnd_init (); /* Precalculate display name */ (void) gdk_display_get_name (_gdk_display); register_display_change_notification (_gdk_display); g_signal_emit_by_name (_gdk_display, "opened"); GDK_NOTE (MISC, g_print ("... _gdk_display now set up\n")); return _gdk_display; }
GdkDeviceManager * _gdk_x11_device_manager_new (GdkDisplay *display) { if (!g_getenv ("GDK_CORE_DEVICE_EVENTS")) { #ifdef XINPUT_2 int opcode, firstevent, firsterror; Display *xdisplay; xdisplay = GDK_DISPLAY_XDISPLAY (display); if (XQueryExtension (xdisplay, "XInputExtension", &opcode, &firstevent, &firsterror)) { int major, minor; major = 2; minor = 3; if (!_gdk_disable_multidevice && XIQueryVersion (xdisplay, &major, &minor) != BadRequest) { GdkX11DeviceManagerXI2 *device_manager_xi2; GDK_NOTE (INPUT, g_message ("Creating XI2 device manager")); device_manager_xi2 = g_object_new (GDK_TYPE_X11_DEVICE_MANAGER_XI2, "display", display, "opcode", opcode, "major", major, "minor", minor, NULL); return GDK_DEVICE_MANAGER (device_manager_xi2); } } #endif /* XINPUT_2 */ } GDK_NOTE (INPUT, g_message ("Creating core device manager")); return g_object_new (GDK_TYPE_X11_DEVICE_MANAGER_CORE, "display", display, NULL); }
static void data_source_target (void *data, struct wl_data_source *source, const char *mime_type) { GDK_NOTE (EVENTS, g_message ("data source target, source = %p, mime_type = %s", source, mime_type)); }
GdkDisplay * gdk_display_open (const gchar *display_name) { GDK_NOTE (MISC, g_print ("gdk_display_open: %s\n", (display_name ? display_name : "NULL"))); if (display_name == NULL || g_ascii_strcasecmp (display_name, gdk_display_get_name (_gdk_display)) == 0) { if (_gdk_display != NULL) { GDK_NOTE (MISC, g_print ("... return _gdk_display\n")); return _gdk_display; } } else { GDK_NOTE (MISC, g_print ("... return NULL\n")); return NULL; } _gdk_display = g_object_new (GDK_TYPE_DISPLAY, NULL); _gdk_screen = g_object_new (GDK_TYPE_SCREEN, NULL); _gdk_monitor_init (); _gdk_visual_init (); gdk_screen_set_default_colormap (_gdk_screen, gdk_screen_get_system_colormap (_gdk_screen)); _gdk_windowing_window_init (); _gdk_windowing_image_init (); _gdk_events_init (); _gdk_input_init (_gdk_display); _gdk_dnd_init (); /* Precalculate display name */ (void) gdk_display_get_name (_gdk_display); g_signal_emit_by_name (gdk_display_manager_get (), "display_opened", _gdk_display); GDK_NOTE (MISC, g_print ("... _gdk_display now set up\n")); return _gdk_display; }
/** * gdk_display_manager_open_display: * @manager: a #GdkDisplayManager * @name: the name of the display to open * * Opens a display. * * Returns: (nullable) (transfer none): a #GdkDisplay, or %NULL if the * display could not be opened */ GdkDisplay * gdk_display_manager_open_display (GdkDisplayManager *manager, const gchar *name) { const gchar *backend_list; GdkDisplay *display; gchar **backends; gint i, j; gboolean allow_any; if (allowed_backends == NULL) allowed_backends = "*"; allow_any = strstr (allowed_backends, "*") != NULL; backend_list = g_getenv ("GDK_BACKEND"); if (backend_list == NULL) backend_list = allowed_backends; else if (g_strcmp0 (backend_list, "help") == 0) { fprintf (stderr, "Supported GDK backends:"); for (i = 0; gdk_backends[i].name != NULL; i++) fprintf (stderr, " %s", gdk_backends[i].name); fprintf (stderr, "\n"); backend_list = allowed_backends; } backends = g_strsplit (backend_list, ",", 0); display = NULL; for (i = 0; display == NULL && backends[i] != NULL; i++) { const gchar *backend = backends[i]; gboolean any = g_str_equal (backend, "*"); if (!allow_any && !any && !strstr (allowed_backends, backend)) continue; for (j = 0; gdk_backends[j].name != NULL; j++) { if ((any && allow_any) || (any && strstr (allowed_backends, gdk_backends[j].name)) || g_str_equal (backend, gdk_backends[j].name)) { GDK_NOTE (MISC, g_message ("Trying %s backend", gdk_backends[j].name)); display = gdk_backends[j].open_display (name); if (display) break; } } } g_strfreev (backends); return display; }
gboolean gdk_wayland_display_init_gl (GdkDisplay *display) { GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display); EGLint major, minor; EGLDisplay *dpy; if (display_wayland->have_egl) return TRUE; dpy = eglGetDisplay ((EGLNativeDisplayType)display_wayland->wl_display); if (dpy == NULL) return FALSE; if (!eglInitialize (dpy, &major, &minor)) return FALSE; if (!eglBindAPI (EGL_OPENGL_API)) return FALSE; display_wayland->egl_display = dpy; display_wayland->egl_major_version = major; display_wayland->egl_minor_version = minor; display_wayland->have_egl = TRUE; display_wayland->have_egl_khr_create_context = epoxy_has_egl_extension (dpy, "EGL_KHR_create_context"); display_wayland->have_egl_buffer_age = epoxy_has_egl_extension (dpy, "EGL_EXT_buffer_age"); display_wayland->have_egl_swap_buffers_with_damage = epoxy_has_egl_extension (dpy, "EGL_EXT_swap_buffers_with_damage"); display_wayland->have_egl_surfaceless_context = epoxy_has_egl_extension (dpy, "EGL_KHR_surfaceless_context"); GDK_NOTE (OPENGL, g_print ("EGL API version %d.%d found\n" " - Vendor: %s\n" " - Version: %s\n" " - Client APIs: %s\n" " - Extensions:\n" "\t%s\n" , display_wayland->egl_major_version, display_wayland->egl_minor_version, eglQueryString (dpy, EGL_VENDOR), eglQueryString(dpy, EGL_VERSION), eglQueryString(dpy, EGL_CLIENT_APIS), eglQueryString(dpy, EGL_EXTENSIONS))); return TRUE; }
gint gdk_text_property_to_text_list(GdkAtom encoding, gint format, const guchar * text, gint length, gchar *** list) { GDK_NOTE(DND, g_print("gdk_text_property_to_text_list not implemented\n")); return 0; }
static void gdk_window_post_scroll (GdkWindow *window, GdkRegion *new_clip_region) { GDK_NOTE (EVENTS, g_print ("gdk_window_clip_changed: invalidating region: %s\n", _gdk_win32_gdkregion_to_string (new_clip_region))); gdk_window_invalidate_region (window, new_clip_region, FALSE); gdk_region_destroy (new_clip_region); }
static LRESULT CALLBACK display_change_window_procedure (HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { LRESULT retval; GDK_NOTE (EVENTS, g_print ("%s%*s%s %p", (debug_indent > 0 ? "\n" : ""), debug_indent, "", _gdk_win32_message_to_string (message), hwnd)); debug_indent += 2; retval = inner_display_change_window_procedure (hwnd, message, wparam, lparam); debug_indent -= 2; GDK_NOTE (EVENTS, g_print (" => %" G_GINT64_FORMAT "%s", (gint64) retval, (debug_indent == 0 ? "\n" : ""))); return retval; }
void _gdk_monitor_init (void) { gint i, index; _gdk_num_monitors = 0; EnumDisplayMonitors (NULL, NULL, count_monitor, (LPARAM) &_gdk_num_monitors); _gdk_monitors = g_renew (GdkWin32Monitor, _gdk_monitors, _gdk_num_monitors); index = 0; EnumDisplayMonitors (NULL, NULL, enum_monitor, (LPARAM) &index); _gdk_offset_x = G_MININT; _gdk_offset_y = G_MININT; /* Calculate offset */ for (i = 0; i < _gdk_num_monitors; i++) { _gdk_offset_x = MAX (_gdk_offset_x, -_gdk_monitors[i].rect.x); _gdk_offset_y = MAX (_gdk_offset_y, -_gdk_monitors[i].rect.y); } GDK_NOTE (MISC, g_print ("Multi-monitor offset: (%d,%d)\n", _gdk_offset_x, _gdk_offset_y)); /* Translate monitor coords into GDK coordinate space */ for (i = 0; i < _gdk_num_monitors; i++) { _gdk_monitors[i].rect.x += _gdk_offset_x; _gdk_monitors[i].rect.y += _gdk_offset_y; GDK_NOTE (MISC, g_print ("Monitor %d: %dx%d@%+d%+d\n", i, _gdk_monitors[i].rect.width, _gdk_monitors[i].rect.height, _gdk_monitors[i].rect.x, _gdk_monitors[i].rect.y)); } }
static void xdg_shell_ping (void *data, struct xdg_shell *xdg_shell, uint32_t serial) { GdkWaylandDisplay *wayland_display = data; _gdk_wayland_display_update_serial (wayland_display, serial); GDK_NOTE (EVENTS, g_message ("ping, shell %p, serial %u\n", xdg_shell, serial)); xdg_shell_pong (xdg_shell, serial); }