|
rofi 2.0.0
|
#include <config.h>#include <cairo-xcb.h>#include <cairo.h>#include <glib.h>#include <math.h>#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <xcb/randr.h>#include <xcb/xcb.h>#include <xcb/xcb_aux.h>#include <xcb/xcb_cursor.h>#include <xcb/xcb_ewmh.h>#include <xcb/xinerama.h>#include <xcb/xkb.h>#include <xcb/xproto.h>#include <xkbcommon/xkbcommon-x11.h>#include <xkbcommon/xkbcommon.h>#include "display-internal.h"#include "display.h"#include "helper.h"#include "rofi-types.h"#include "settings.h"#include "timings.h"#include "xcb-internal.h"#include "xcb.h"#include <libsn/sn.h>#include <stdbool.h>#include "mode.h"#include "modes/window.h"#include <rofi.h>
Go to the source code of this file.
Macros | |
| #define | G_LOG_DOMAIN "X11Helper" |
| #define | SN_API_NOT_YET_FROZEN |
| #define | sn_launcher_context_set_application_id sn_launcher_set_application_id |
| #define | RANDR_PREF_MAJOR_VERSION 1 |
| #define | RANDR_PREF_MINOR_VERSION 5 |
| #define | INTERSECT(x, y, x1, y1, w1, h1) |
Functions | |
| static xcb_visualtype_t * | lookup_visual (xcb_screen_t *s, xcb_visualid_t vis) |
| static uint32_t * | create_kernel (int radius, double deviation, uint32_t *sum2) |
| void | cairo_image_surface_blur (cairo_surface_t *surface, int radius, double deviation) |
| cairo_surface_t * | x11_helper_get_screenshot_surface_window (xcb_window_t window, int size) |
| cairo_surface_t * | x11_helper_get_screenshot_surface (void) |
| static xcb_pixmap_t | get_root_pixmap (xcb_connection_t *c, xcb_screen_t *screen, xcb_atom_t atom) |
| cairo_surface_t * | x11_helper_get_bg_surface (void) |
| char * | window_get_text_prop (xcb_window_t w, xcb_atom_t atom) |
| void | window_set_atom_prop (xcb_window_t w, xcb_atom_t prop, xcb_atom_t *atoms, int count) |
| static void | x11_monitor_free (workarea *m) |
| static void | x11_monitors_free (void) |
| static void | x11_workarea_fix_rotation (workarea *w) |
| static workarea * | x11_get_monitor_from_output (xcb_randr_output_t out) |
| static int | x11_is_extension_present (const char *extension) |
| static void | x11_build_monitor_layout_xinerama (void) |
| static void | x11_build_monitor_layout (void) |
| static void | xcb_display_dump_monitor_layout (void) |
| static void | xcb_display_startup_notification (RofiHelperExecuteContext *context, GSpawnChildSetupFunc *child_setup, gpointer *user_data) |
| static int | monitor_get_dimension (int monitor_id, workarea *mon) |
| static void | monitor_dimensions (int x, int y, workarea *mon) |
| static int | pointer_get (xcb_window_t root, int *x, int *y) |
| static int | monitor_active_from_winid (xcb_drawable_t id, workarea *mon) |
| static int | monitor_active_from_id_focused (int mon_id, workarea *mon) |
| static int | monitor_active_from_id (int mon_id, workarea *mon) |
| static int | xcb_display_monitor_active (workarea *mon) |
| static bool | get_atom_name (xcb_connection_t *conn, xcb_atom_t atom, char **out) |
| static void | rofi_view_paste (RofiViewState *state, xcb_selection_notify_event_t *xse) |
| static gboolean | x11_button_to_nk_bindings_button (guint32 x11_button, NkBindingsMouseButton *button) |
| static gboolean | x11_button_to_nk_bindings_scroll (guint32 x11_button, NkBindingsScrollAxis *axis, gint32 *steps) |
| static void | rofi_key_press_event_handler (xcb_key_press_event_t *xkpe, RofiViewState *state) |
| static void | rofi_key_release_event_handler (xcb_key_release_event_t *xkre, G_GNUC_UNUSED RofiViewState *state) |
| static void | main_loop_x11_event_handler_view (xcb_generic_event_t *event) |
| static gboolean | main_loop_x11_event_handler (xcb_generic_event_t *ev, G_GNUC_UNUSED gpointer user_data) |
| static int | take_pointer (xcb_window_t w, int iters) |
| static int | take_keyboard (xcb_window_t w, int iters) |
| static void | release_keyboard (void) |
| static void | release_pointer (void) |
| static void | error_trap_push (G_GNUC_UNUSED SnDisplay *display, G_GNUC_UNUSED xcb_connection_t *xdisplay) |
| static void | error_trap_pop (G_GNUC_UNUSED SnDisplay *display, xcb_connection_t *xdisplay) |
| static void | x11_create_frequently_used_atoms (void) |
| char * | x11_helper_get_window_manager (void) |
| static void | x11_helper_discover_window_manager (void) |
| static gboolean | xcb_display_setup (GMainLoop *main_loop, NkBindings *bindings) |
| static void | x11_create_visual_and_colormap (void) |
| static void | x11_lookup_cursors (void) |
| static gboolean | lazy_grab_pointer (G_GNUC_UNUSED gpointer data) |
| static gboolean | lazy_grab_keyboard (G_GNUC_UNUSED gpointer data) |
| static gboolean | xcb_display_late_setup (void) |
| xcb_window_t | xcb_stuff_get_root_window (void) |
| static void | xcb_display_early_cleanup (void) |
| static void | xcb_display_cleanup (void) |
| void | x11_disable_decoration (xcb_window_t window) |
| void | x11_set_cursor (xcb_window_t window, X11CursorType type) |
| void | xcb_stuff_set_clipboard (char *data) |
| static void | xcb_display_set_input_focus (guint w) |
| static void | xcb_display_revert_input_focus (void) |
| static guint | xcb_display_scale (void) |
| static const struct _view_proxy * | xcb_display_view_proxy (void) |
Variables | |
| WindowManagerQuirk | current_window_manager = WM_EWHM |
| struct _xcb_stuff | xcb_int |
| xcb_stuff * | xcb = &xcb_int |
| xcb_depth_t * | depth = NULL |
| xcb_visualtype_t * | visual = NULL |
| xcb_colormap_t | map = XCB_COLORMAP_NONE |
| static xcb_visualtype_t * | root_visual = NULL |
| xcb_atom_t | netatoms [NUM_NETATOMS] |
| const char * | netatom_names [] = {EWMH_ATOMS(ATOM_CHAR)} |
| xcb_cursor_t | cursors [NUM_CURSORS] |
| struct { | |
| const char * css_name | |
| const char * traditional_name | |
| } | cursor_names [] |
| gboolean | mon_set = FALSE |
| workarea | mon_cache |
| static int | error_trap_depth = 0 |
| unsigned int | lazy_grab_retry_count_kb = 0 |
| unsigned int | lazy_grab_retry_count_pt = 0 |
| static display_proxy | display_ |
| display_proxy *const | xcb_proxy = &display_ |
| #define G_LOG_DOMAIN "X11Helper" |
| #define INTERSECT | ( | x, | |
| y, | |||
| x1, | |||
| y1, | |||
| w1, | |||
| h1 ) |
Checks if the if x and y is inside rectangle.
Definition at line 84 of file display.c.
Referenced by monitor_dimensions().
| #define RANDR_PREF_MAJOR_VERSION 1 |
Minimal randr preferred for running rofi (1.5) (Major version number)
Definition at line 79 of file display.c.
Referenced by x11_build_monitor_layout().
| #define RANDR_PREF_MINOR_VERSION 5 |
Minimal randr preferred for running rofi (1.5) (Minor version number)
Definition at line 81 of file display.c.
Referenced by x11_build_monitor_layout().
| #define SN_API_NOT_YET_FROZEN |
| #define sn_launcher_context_set_application_id sn_launcher_set_application_id |
This function is declared as sn_launcher_context_set_application_id but implemented as sn_launcher_set_application_id. Quick Fix.
Definition at line 61 of file display.c.
Referenced by xcb_display_startup_notification().
| void cairo_image_surface_blur | ( | cairo_surface_t * | surface, |
| int | radius, | ||
| double | deviation ) |
| surface | |
| radius | |
| deviation |
Blur the content of the surface with radius and deviation.
Definition at line 178 of file display.c.
References create_kernel(), TICK, and TICK_N.
Referenced by xcb_rofi_view_setup_fake_transparency().


|
static |
Definition at line 151 of file display.c.
Referenced by cairo_image_surface_blur().

|
static |
Definition at line 1564 of file display.c.
References error_trap_depth.
Referenced by xcb_display_setup().

|
static |
Definition at line 1559 of file display.c.
References error_trap_depth.
Referenced by xcb_display_setup().

|
static |
Definition at line 1074 of file display.c.
Referenced by rofi_view_paste().

|
static |
Definition at line 354 of file display.c.
Referenced by x11_helper_get_bg_surface().

|
static |
Definition at line 1863 of file display.c.
References lazy_grab_retry_count_kb, take_keyboard(), xcb, and xcb_stuff_get_root_window().
Referenced by xcb_display_late_setup().


|
static |
Definition at line 1850 of file display.c.
References lazy_grab_retry_count_pt, take_pointer(), and xcb_stuff_get_root_window().
Referenced by xcb_display_late_setup().


|
static |
Definition at line 133 of file display.c.
Referenced by x11_helper_get_screenshot_surface_window().

|
static |
Definition at line 1438 of file display.c.
References config, main_loop_x11_event_handler_view(), rofi_view_get_active(), rofi_view_maybe_update(), and xcb.
Referenced by xcb_display_setup().


|
static |
Process X11 events in the main-loop (gui-thread) of the application.
Definition at line 1221 of file display.c.
References config, netatoms, rofi_key_press_event_handler(), rofi_key_release_event_handler(), rofi_view_frame_callback(), rofi_view_get_active(), rofi_view_get_window(), rofi_view_handle_mouse_motion(), rofi_view_maybe_update(), rofi_view_paste(), rofi_view_temp_click_to_exit(), rofi_view_temp_configure_notify(), time, x11_button_to_nk_bindings_button(), x11_button_to_nk_bindings_scroll(), xcb, and xcb_stuff_set_clipboard().
Referenced by main_loop_x11_event_handler().


|
static |
Definition at line 922 of file display.c.
References mon, monitor_active_from_id(), monitor_active_from_id_focused(), monitor_dimensions(), pointer_get(), and xcb.
Referenced by monitor_active_from_id(), and xcb_display_monitor_active().


|
static |
Definition at line 851 of file display.c.
References mon, monitor_dimensions(), and xcb.
Referenced by monitor_active_from_id().


|
static |
Definition at line 821 of file display.c.
Referenced by xcb_display_monitor_active().

|
static |
Definition at line 779 of file display.c.
References INTERSECT, mon, and xcb.
Referenced by monitor_active_from_id(), monitor_active_from_id_focused(), and xcb_display_monitor_active().

|
static |
Definition at line 764 of file display.c.
References mon, _workarea::monitor_id, _workarea::next, and xcb.
Referenced by xcb_display_monitor_active().

|
static |
| root | The X11 window used to find the pointer position. Usually the root window. |
| x | The x position of the mouse [out] |
| y | The y position of the mouse [out] |
find mouse pointer location
Definition at line 806 of file display.c.
References xcb.
Referenced by monitor_active_from_id().

|
static |
Definition at line 1550 of file display.c.
References xcb.
Referenced by xcb_display_early_cleanup().

|
static |
Definition at line 1553 of file display.c.
References xcb.
Referenced by xcb_display_early_cleanup().

|
static |
Definition at line 1190 of file display.c.
References config, rofi_view_handle_text(), and xcb.
Referenced by main_loop_x11_event_handler_view().


|
static |
Definition at line 1210 of file display.c.
References xcb.
Referenced by main_loop_x11_event_handler_view().

|
static |
| state | Internal state of the menu. |
| xse | X selection event. |
Handle paste event.
Definition at line 1109 of file display.c.
References get_atom_name(), rofi_view_handle_text(), window_get_text_prop(), and xcb.
Referenced by main_loop_x11_event_handler_view().


|
static |
Definition at line 1522 of file display.c.
References xcb.
Referenced by lazy_grab_keyboard(), and xcb_display_late_setup().

|
static |
Definition at line 1493 of file display.c.
References xcb.
Referenced by lazy_grab_pointer(), and xcb_display_late_setup().

| char * window_get_text_prop | ( | xcb_window_t | w, |
| xcb_atom_t | atom ) |
| w | The xcb_window_t to read property from. |
| atom | The property identifier |
Get text property defined by atom from window. Support utf8.
Definition at line 388 of file display.c.
References netatoms, rofi_latin_to_utf8_strdup(), and xcb.
Referenced by rofi_view_paste().


| void window_set_atom_prop | ( | xcb_window_t | w, |
| xcb_atom_t | prop, | ||
| xcb_atom_t * | atoms, | ||
| int | count ) |
| w | The xcb_window_t to set property on |
| prop | Atom of the property to change |
| atoms | List of atoms to change the property too |
| count | The length of the atoms list. |
Set property on window.
Definition at line 414 of file display.c.
Referenced by xcb___create_window().

|
static |
Definition at line 595 of file display.c.
References _workarea::next, _workarea::primary, RANDR_PREF_MAJOR_VERSION, RANDR_PREF_MINOR_VERSION, x11_build_monitor_layout_xinerama(), x11_get_monitor_from_output(), x11_is_extension_present(), and xcb.
Referenced by xcb_display_setup().


|
static |
Definition at line 564 of file display.c.
References _workarea::h, _workarea::next, _workarea::w, _workarea::x, xcb, and _workarea::y.
Referenced by x11_build_monitor_layout().

|
static |
Definition at line 1138 of file display.c.
Referenced by main_loop_x11_event_handler_view().

|
static |
Definition at line 1167 of file display.c.
References rofi_fallthrough.
Referenced by main_loop_x11_event_handler_view().

|
static |
Fill in the list of frequently used X11 Atoms.
Definition at line 1578 of file display.c.
References netatom_names, netatoms, NUM_NETATOMS, and xcb.
Referenced by xcb_display_setup().

|
static |
Definition at line 1784 of file display.c.
References depth, map, root_visual, visual, and xcb.
Referenced by xcb_display_late_setup().

| void x11_disable_decoration | ( | xcb_window_t | window | ) |
|
static |
Create monitor based on output id
Definition at line 460 of file display.c.
References _workarea::h, _workarea::mh, _workarea::mw, _workarea::name, _workarea::w, _workarea::x, x11_workarea_fix_rotation(), xcb, and _workarea::y.
Referenced by x11_build_monitor_layout().


|
static |
Definition at line 1612 of file display.c.
References current_window_manager, WM_DO_NOT_CHANGE_CURRENT_DESKTOP, WM_PANGO_WORKSPACE_NAMES, xcb, and xcb_stuff_get_root_window().
Referenced by xcb_display_setup().


| cairo_surface_t * x11_helper_get_bg_surface | ( | void | ) |
Gets a surface containing the background image of the desktop.
Definition at line 374 of file display.c.
References get_root_pixmap(), netatoms, root_visual, and xcb.
Referenced by xcb_rofi_view_setup_fake_transparency().


| cairo_surface_t * x11_helper_get_screenshot_surface | ( | void | ) |
Holds for each supported modifier the possible modifier mask. Check x11_mod_masks[MODIFIER]&mask != 0 to see if MODIFIER is activated.
Definition at line 348 of file display.c.
References root_visual, xcb, and xcb_stuff_get_root_window().
Referenced by xcb_rofi_view_setup_fake_transparency().


| cairo_surface_t * x11_helper_get_screenshot_surface_window | ( | xcb_window_t | window, |
| int | size ) |
| window | the window the screenshot |
| size | Size of the thumbnail |
Creates a thumbnail of the window.
Definition at line 287 of file display.c.
References lookup_visual(), and xcb.

| char * x11_helper_get_window_manager | ( | void | ) |
Get the currently detected window manager.
Definition at line 1592 of file display.c.
References xcb, and xcb_stuff_get_root_window().
Referenced by help().


|
static |
Definition at line 550 of file display.c.
References xcb.
Referenced by x11_build_monitor_layout().

|
static |
Definition at line 1827 of file display.c.
References css_name, cursor_names, cursors, NUM_CURSORS, traditional_name, and xcb.
Referenced by xcb_display_late_setup().

|
static |
Free monitor structure.
Definition at line 427 of file display.c.
References _workarea::name.
Referenced by x11_monitors_free().

|
static |
Definition at line 432 of file display.c.
References _workarea::next, x11_monitor_free(), and xcb.
Referenced by xcb_display_cleanup().


| void x11_set_cursor | ( | xcb_window_t | window, |
| X11CursorType | type ) |
| window | |
| type |
Change mouse cursor
Definition at line 1977 of file display.c.
References cursors, NUM_CURSORS, and xcb.
Referenced by xcb_rofi_view_set_cursor().

|
static |
Quick function that tries to fix the size (for dpi calculation) when monitor is rotate. This assumes the density is kinda equal in both X/Y direction.
Definition at line 445 of file display.c.
References _workarea::h, _workarea::mh, _workarea::mw, and _workarea::w.
Referenced by x11_get_monitor_from_output().

|
static |
Definition at line 1919 of file display.c.
References config, x11_monitors_free(), and xcb.

|
static |
Definition at line 696 of file display.c.
References color_bold, color_reset, and xcb.
|
static |
Definition at line 1913 of file display.c.
References release_keyboard(), release_pointer(), and xcb.

|
static |
Create window (without showing)
Definition at line 1878 of file display.c.
References find_arg(), lazy_grab_keyboard(), lazy_grab_pointer(), take_keyboard(), take_pointer(), x11_create_visual_and_colormap(), x11_lookup_cursors(), and xcb_stuff_get_root_window().

|
static |
Definition at line 1003 of file display.c.
References config, mon, mon_cache, mon_set, monitor_active_from_id(), monitor_active_from_winid(), monitor_dimensions(), monitor_get_dimension(), and xcb.

|
static |
|
static |
|
static |
Definition at line 1637 of file display.c.
References bindings, config, error_trap_pop(), error_trap_push(), find_arg_str(), main_loop, main_loop_x11_event_handler(), TICK_N, x11_build_monitor_layout(), x11_create_frequently_used_atoms(), x11_helper_discover_window_manager(), and xcb.

|
static |
Definition at line 722 of file display.c.
References RofiHelperExecuteContext::app_id, RofiHelperExecuteContext::binary, RofiHelperExecuteContext::command, RofiHelperExecuteContext::description, RofiHelperExecuteContext::icon, RofiHelperExecuteContext::name, sn_launcher_context_set_application_id, RofiHelperExecuteContext::wmclass, and xcb.
|
static |
Definition at line 2029 of file display.c.
References xcb_view_proxy.
| xcb_window_t xcb_stuff_get_root_window | ( | void | ) |
Get the root window.
Definition at line 1911 of file display.c.
References xcb.
Referenced by lazy_grab_keyboard(), lazy_grab_pointer(), x11_helper_discover_window_manager(), x11_helper_get_screenshot_surface(), x11_helper_get_window_manager(), xcb___create_window(), and xcb_display_late_setup().

| void xcb_stuff_set_clipboard | ( | char * | data | ) |
| data | String to copy to clipboard. |
copies string to clipboard.
Definition at line 1989 of file display.c.
References xcb.
Referenced by main_loop_x11_event_handler_view(), rofi_view_trigger_global_action(), and xcb_rofi_view_cleanup().

| const char* css_name |
| WindowManagerQuirk current_window_manager = WM_EWHM |
Indicates the current window manager. This is used for work-arounds.
Definition at line 87 of file display.c.
Referenced by x11_helper_discover_window_manager().
| const struct { ... } cursor_names[] |
Mapping between theme name and system name for mouse cursor.
Referenced by x11_lookup_cursors().
| xcb_cursor_t cursors[NUM_CURSORS] |
Cached X11 cursors.
Definition at line 121 of file display.c.
Referenced by x11_lookup_cursors(), and x11_set_cursor().
| xcb_depth_t* depth = NULL |
Depth of root window.
Definition at line 108 of file display.c.
Referenced by x11_create_visual_and_colormap(), xcb___create_window(), xcb_rofi_view_temp_configure_notify(), and xcb_rofi_view_window_update_size().
|
static |
|
static |
X server error depth. to handle nested errors.
Definition at line 1558 of file display.c.
Referenced by error_trap_pop(), and error_trap_push().
| unsigned int lazy_grab_retry_count_kb = 0 |
Retry count of grabbing keyboard.
Definition at line 1847 of file display.c.
Referenced by lazy_grab_keyboard().
| unsigned int lazy_grab_retry_count_pt = 0 |
Retry count of grabbing pointer.
Definition at line 1849 of file display.c.
Referenced by lazy_grab_pointer().
| xcb_colormap_t map = XCB_COLORMAP_NONE |
Color map to use for creating window
Definition at line 110 of file display.c.
Referenced by x11_create_visual_and_colormap(), xcb___create_window(), and xcb_rofi_view_cleanup().
| workarea mon_cache |
cached monitor cache, to avoid multiple roundtrips to fetch this.
Definition at line 1000 of file display.c.
Referenced by xcb_display_monitor_active().
| gboolean mon_set = FALSE |
The cached monitor setup (mon_cache) is populated
Definition at line 998 of file display.c.
Referenced by xcb_display_monitor_active().
| const char* netatom_names[] = {EWMH_ATOMS(ATOM_CHAR)} |
atoms as string
Definition at line 116 of file display.c.
Referenced by x11_create_frequently_used_atoms().
| xcb_atom_t netatoms[NUM_NETATOMS] |
atoms
Definition at line 115 of file display.c.
Referenced by main_loop_x11_event_handler_view(), rofi_view_trigger_global_action(), window_get_text_prop(), x11_create_frequently_used_atoms(), x11_disable_decoration(), x11_helper_get_bg_surface(), and xcb___create_window().
|
static |
Visual of the root window.
Definition at line 114 of file display.c.
Referenced by x11_create_visual_and_colormap(), x11_helper_get_bg_surface(), and x11_helper_get_screenshot_surface().
| const char* traditional_name |
| xcb_visualtype_t* visual = NULL |
Visual to use for creating window
Definition at line 109 of file display.c.
Referenced by x11_create_visual_and_colormap(), xcb___create_window(), xcb_rofi_view_temp_configure_notify(), and xcb_rofi_view_window_update_size().
Global pointer to xcb_stuff instance.
Definition at line 103 of file display.c.
Referenced by lazy_grab_keyboard(), main_loop_x11_event_handler(), main_loop_x11_event_handler_view(), monitor_active_from_id(), monitor_active_from_id_focused(), monitor_active_from_winid(), monitor_dimensions(), monitor_get_dimension(), pointer_get(), release_keyboard(), release_pointer(), rofi_key_press_event_handler(), rofi_key_release_event_handler(), rofi_view_create(), rofi_view_error_dialog(), rofi_view_paste(), rofi_view_set_selected_line(), rofi_view_trigger_global_action(), take_keyboard(), take_pointer(), window_get_text_prop(), window_set_atom_prop(), x11_build_monitor_layout(), x11_build_monitor_layout_xinerama(), x11_create_frequently_used_atoms(), x11_create_visual_and_colormap(), x11_disable_decoration(), x11_get_monitor_from_output(), x11_helper_discover_window_manager(), x11_helper_get_bg_surface(), x11_helper_get_screenshot_surface(), x11_helper_get_screenshot_surface_window(), x11_helper_get_window_manager(), x11_is_extension_present(), x11_lookup_cursors(), x11_monitors_free(), x11_set_cursor(), xcb___create_window(), xcb_display_cleanup(), xcb_display_dump_monitor_layout(), xcb_display_early_cleanup(), xcb_display_monitor_active(), xcb_display_revert_input_focus(), xcb_display_set_input_focus(), xcb_display_setup(), xcb_display_startup_notification(), xcb_rofi_view_cleanup(), xcb_rofi_view_hide(), xcb_rofi_view_ping_mouse(), xcb_rofi_view_repaint(), xcb_rofi_view_set_window_title(), xcb_rofi_view_temp_configure_notify(), xcb_rofi_view_window_update_size(), xcb_stuff_get_root_window(), and xcb_stuff_set_clipboard().
| struct _xcb_stuff xcb_int |
| display_proxy* const xcb_proxy = &display_ |