/** * gdk_win32_display_add_filter: * @display: a #GdkWin32Display * @function: filter callback * @data: data to pass to filter callback * * Adds an event filter to @window, allowing you to intercept messages * before they reach GDK. This is a low-level operation and makes it * easy to break GDK and/or GTK+, so you have to know what you're * doing. **/ void gdk_win32_display_add_filter (GdkWin32Display *display, GdkWin32MessageFilterFunc function, gpointer data) { GList *tmp_list; GdkWin32MessageFilter *filter; g_return_if_fail (GDK_IS_WIN32_DISPLAY (display)); tmp_list = display->filters; for (tmp_list = display->filters; tmp_list; tmp_list = tmp_list->next) { filter = (GdkWin32MessageFilter *) tmp_list->data; if ((filter->function == function) && (filter->data == data)) { filter->ref_count++; return; } } filter = g_new (GdkWin32MessageFilter, 1); filter->function = function; filter->data = data; filter->ref_count = 1; filter->removed = FALSE; display->filters = g_list_append (display->filters, filter); }
static GdkScreen * gdk_win32_display_get_default_screen (GdkDisplay *display) { g_return_val_if_fail (GDK_IS_WIN32_DISPLAY (display), NULL); return GDK_WIN32_DISPLAY (display)->screen; }
/** * gdk_win32_display_remove_filter: * @display: A #GdkWin32Display * @function: previously-added filter function * @data: user data for previously-added filter function * * Remove a filter previously added with gdk_win32_display_add_filter(). */ void gdk_win32_display_remove_filter (GdkWin32Display *display, GdkWin32MessageFilterFunc function, gpointer data) { GList *tmp_list; GdkWin32MessageFilter *filter; g_return_if_fail (GDK_IS_WIN32_DISPLAY (display)); tmp_list = display->filters; while (tmp_list) { filter = (GdkWin32MessageFilter *) tmp_list->data; tmp_list = tmp_list->next; if ((filter->function == function) && (filter->data == data)) { filter->removed = TRUE; _gdk_win32_message_filter_unref (display, filter); return; } } }
static void *get_proc_address(void *fn_ctx, const gchar *name) { GdkDisplay *display = gdk_display_get_default(); #ifdef GDK_WINDOWING_WAYLAND if (GDK_IS_WAYLAND_DISPLAY(display)) return eglGetProcAddress(name); #endif #ifdef GDK_WINDOWING_X11 if (GDK_IS_X11_DISPLAY(display)) return (void *)(intptr_t)glXGetProcAddressARB((const GLubyte *)name); #endif #ifdef GDK_WINDOWING_WIN32 if (GDK_IS_WIN32_DISPLAY(display)) return wglGetProcAddress(name); #endif g_assert_not_reached(); }
static CoglRenderer * clutter_backend_gdk_get_renderer (ClutterBackend *backend, GError **error) { ClutterBackendGdk *backend_gdk = CLUTTER_BACKEND_GDK (backend); CoglRenderer *renderer = cogl_renderer_new (); #if defined(GDK_WINDOWING_X11) && defined(COGL_HAS_XLIB_SUPPORT) if (GDK_IS_X11_DISPLAY (backend_gdk->display)) { Display *xdisplay = gdk_x11_display_get_xdisplay (backend_gdk->display); cogl_xlib_renderer_set_foreign_display (renderer, xdisplay); } else #endif #if defined(GDK_WINDOWING_WIN32) if (GDK_IS_WIN32_DISPLAY (backend_gdk->display)) { /* Force a WGL winsys on windows */ cogl_renderer_set_winsys_id (renderer, COGL_WINSYS_ID_WGL); } else #endif { g_set_error (error, CLUTTER_INIT_ERROR, CLUTTER_INIT_ERROR_BACKEND, _("Could not find a suitable CoglWinsys for a GdkDisplay of type %s"), G_OBJECT_TYPE_NAME (backend_gdk->display)); cogl_object_unref (renderer); return NULL; } return renderer; }