wlmaker
|
#include "window.h"
#include <libbase/libbase.h>
#include <linux/input-event-codes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wlr/types/wlr_keyboard.h>
#include <wlr/types/wlr_output.h>
#include <wlr/types/wlr_output_layout.h>
#include <wlr/types/wlr_seat.h>
#include "bordered.h"
#include "box.h"
#include "container.h"
#include "input.h"
#include "resizebar.h"
#include "surface.h"
#include "test.h"
#include "tile.h"
#include "titlebar.h"
#include "workspace.h"
Classes | |
struct | wlmtk_window_vmt_t |
struct | wlmtk_pending_update_t |
struct | _wlmtk_window_t |
struct | wlmtk_fake_window_state_t |
Macros | |
#define | WLR_USE_UNSTABLE |
Include unstable interfaces of wlroots. | |
#define | WLMTK_WINDOW_MAX_PENDING 64 |
Variables | |
static const wlmtk_element_vmt_t | window_element_vmt |
static const wlmtk_container_vmt_t | window_container_vmt |
static const wlmtk_window_vmt_t | _wlmtk_window_vmt |
static const uint32_t | _wlmtk_window_default_properties |
static const wlmtk_window_vmt_t | _wlmtk_fake_window_vmt |
const bs_test_case_t | wlmtk_window_test_cases [] |
static const wlmtk_tile_style_t | _wlmtk_workspace_test_tile_style |
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
#define WLMTK_WINDOW_MAX_PENDING 64 |
Maximum number of pending state updates.
|
static |
Fake implementation of wlmtk_window_request_minimize. Records call.
|
static |
Fake implementation of wlmtk_window_request_move. Records call
|
static |
Fake implementation of wlmtk_window_request_resize. Records call.
|
static |
Applies window decoration depending on current state.
|
static |
Implementation of wlmtk_container_vmt_t::update_layout.
Invoked when the window's contained elements triggered a layout update, and will use this to trigger (potential) size updates to the window decorations.
container_ptr |
|
static |
Creates the resizebar. Expects server_side_decorated to be set.
|
static |
Creates the titlebar. Expects server_side_decorated to be set.
|
static |
Destroys the resizebar.
|
static |
Destroys the titlebar.
|
static |
Activates window on button press, and calls the parent's implementation.
|
static |
Extends the window's virtual methods.
window_ptr | |
window_vmt_ptr |
|
static |
Uninitializes the window.
window_ptr |
|
static |
Gets the struct wlr_output that the window prefers, or is on.
window_ptr |
|
static |
Initializes an (allocated) window.
window_ptr | |
element_ptr |
|
static |
Handles wlmtk_menu_events_t::request_close signals.
|
static |
Prepares a positional update: Allocates an item and attach it to the end of the list of pending updates.
window_ptr |
|
static |
Releases a pending positional update. Moves it to the list of wlmtk_window_t::available_updates.
window_ptr | |
update_ptr |
|
static |
Default implementation of wlmtk_window_request_minimize.
|
static |
Default implementation of wlmtk_window_request_move.
|
static |
Helper: Requests position and size, factoring in decoration.
window_ptr | |
x | |
y | |
width | |
height | |
include_titlebar | |
include_resizebar | |
include_extra |
|
static |
Default implementation of wlmtk_window_request_resize.
|
static |
Tests setup and teardown.
|
static |
Tests fake window ctor and dtor.
|
static |
Tests turning a window to fullscreen and back.
|
static |
Tests turning a window to fullscreen and back on multiple outputs.
|
static |
Tests that unmapping a fullscreen window works.
|
static |
Tests maximizing and un-maximizing a window.
|
static |
Tests maximizing a window on multiple outputs. Must align with output.
|
static |
Tests activation.
|
static |
Tests enabling and disabling server-side decoration.
|
static |
Tests server-side decoration depending on properties.
|
static |
Tests activation.
|
static |
Tests title.
|
static |
Verifies that window shading hides the element and raises signal.
bs_dllist_node_t * wlmtk_dlnode_from_window | ( | wlmtk_window_t * | window_ptr | ) |
Accessor: Returns pointer to wlmtk_window_t::dlnode.
void wlmtk_fake_window_commit_size | ( | wlmtk_fake_window_t * | fake_window_ptr | ) |
Calls commit_size with the fake surface's serial and dimensions.
wlmtk_fake_window_t * wlmtk_fake_window_create | ( | void | ) |
Ctor.
void wlmtk_fake_window_destroy | ( | wlmtk_fake_window_t * | fake_window_ptr | ) |
Dtor.
void wlmtk_window_commit_fullscreen | ( | wlmtk_window_t * | window_ptr, |
bool | fullscreen | ||
) |
Commits the fullscreen mode for the window.
This is the "commit" part of the potentially asynchronous operation. To be called by wlmtk_content_t, after wlmtk_content_request_fullscreen has completed by the client.
The call is idempotent: Once the window is committed, further calls with the same fullscreen
value will return straight away.
window_ptr | |
fullscreen |
void wlmtk_window_commit_maximized | ( | wlmtk_window_t * | window_ptr, |
bool | maximized | ||
) |
Commits the maximized
mode for the window.
This is the "commit" part of the potentially asynchronous operation. To be called by wlmtk_content_t, after wlmtk_content_request_maximized has completed by the client.
The call is idempotent: Once the window is committed, further calls with the same maximized
value will return straight away.
window_ptr | |
maximized |
wlmtk_window_t * wlmtk_window_create | ( | wlmtk_content_t * | content_ptr, |
const wlmtk_window_style_t * | style_ptr, | ||
const wlmtk_menu_style_t * | menu_style_ptr, | ||
struct wlr_seat * | wlr_seat_ptr | ||
) |
Creates a window for the given content.
content_ptr | |
style_ptr | |
menu_style_ptr | |
wlr_seat_ptr |
void wlmtk_window_destroy | ( | wlmtk_window_t * | window_ptr | ) |
Destroys the window.
window_ptr |
wlmtk_element_t * wlmtk_window_element | ( | wlmtk_window_t * | window_ptr | ) |
Returns the super Element of the window.
TODO(kaese.nosp@m.r@gu.nosp@m.bbe.c.nosp@m.h): Re-evaluate whether to work with accessors, or whether to keep the ancestry members public.
window_ptr |
wlmtk_window_events_t * wlmtk_window_events | ( | wlmtk_window_t * | window_ptr | ) |
Gets the set of events available to a window, for binding listeners.
window_ptr |
wlmtk_window_t * wlmtk_window_from_dlnode | ( | bs_dllist_node_t * | dlnode_ptr | ) |
Returns wlmtk_window_t for the dlnode_ptr
.
wlmtk_window_t * wlmtk_window_from_element | ( | wlmtk_element_t * | element_ptr | ) |
Returns the window from the super Element.
element_ptr |
element_ptr
is the ancestor. const wlmtk_util_client_t * wlmtk_window_get_client_ptr | ( | wlmtk_window_t * | window_ptr | ) |
content_ptr
. struct wlr_box wlmtk_window_get_position_and_size | ( | wlmtk_window_t * | window_ptr | ) |
Returns the current position and size of the window.
window_ptr |
void wlmtk_window_get_size | ( | wlmtk_window_t * | window_ptr, |
int * | width_ptr, | ||
int * | height_ptr | ||
) |
Obtains the size of the window, including potential decorations.
window_ptr | |
width_ptr | May be NULL. |
height_ptr | May be NULL. |
const char * wlmtk_window_get_title | ( | wlmtk_window_t * | window_ptr | ) |
Returns the title of the window.
window_ptr |
wlmtk_workspace_t * wlmtk_window_get_workspace | ( | wlmtk_window_t * | window_ptr | ) |
bool wlmtk_window_is_activated | ( | wlmtk_window_t * | window_ptr | ) |
Returns whether the window is activated (has keyboard focus).
window_ptr |
bool wlmtk_window_is_fullscreen | ( | wlmtk_window_t * | window_ptr | ) |
Returns whether the window is currently in fullscreen mode.
Will return the state after wlmtk_window_commit_fullscreen has completed.
window_ptr |
bool wlmtk_window_is_maximized | ( | wlmtk_window_t * | window_ptr | ) |
Returns whether the window is currently (requested to be) maximized.
bool wlmtk_window_is_shaded | ( | wlmtk_window_t * | window_ptr | ) |
Returns whether the window is currently "shaded".
window_ptr |
wlmtk_menu_t * wlmtk_window_menu | ( | wlmtk_window_t * | window_ptr | ) |
Returns a pointer to the window menu's state.
window_ptr |
void wlmtk_window_menu_set_enabled | ( | wlmtk_window_t * | window_ptr, |
bool | enabled | ||
) |
Enables (shows) or disabled (hides) the window's menu.
window_ptr | |
enabled |
void wlmtk_window_request_close | ( | wlmtk_window_t * | window_ptr | ) |
Requests to close the window.
window_ptr |
void wlmtk_window_request_fullscreen | ( | wlmtk_window_t * | window_ptr, |
bool | fullscreen | ||
) |
Requests the window to be made fullscreen (or stops so).
Requires the window to be mapped (to a workspace). This may be implemented as an asynchronous operation. Once the window content is ready, it should call wlmtk_window_commit_fullscreen to complete the operation.
window_ptr | |
fullscreen | Whether to enable fullscreen mode. |
void wlmtk_window_request_fullscreen_position | ( | wlmtk_window_t * | window_ptr | ) |
Requests to (re)position a fullscreen window. A no-op if not fullscreen.
window_ptr |
void wlmtk_window_request_maximized | ( | wlmtk_window_t * | window_ptr, |
bool | maximized | ||
) |
Reuests the window to be maximized.
Requires the window to be mapped (to a workspace). Will lookup the maximize extents from the workspace, and request a corresponding updated position and size for the window. wlmtk_window_t::organic_size will not be updated.
This may be implemented as an asynchronous operation. Maximization will be applied once the size change has been committed by the surface.
window_ptr | |
maximized |
void wlmtk_window_request_minimize | ( | wlmtk_window_t * | window_ptr | ) |
Requests to minimize (iconify) the window.
window_ptr |
void wlmtk_window_request_move | ( | wlmtk_window_t * | window_ptr | ) |
Requests a move for the window.
Requires the window to be mapped (to a workspace), and forwards the call to wlmtk_workspace_begin_window_move.
window_ptr |
void wlmtk_window_request_position_and_size | ( | wlmtk_window_t * | window_ptr, |
int | x, | ||
int | y, | ||
int | width, | ||
int | height | ||
) |
Requests an updated position and size for the window, including potential decorations.
This may be implemented as an asynchronous operation. The re-positioning will be applied only once the size change has been committed by the client.
The position and size will be stored in wlmtk_window_t::organic_size.
window_ptr | |
x | |
y | |
width | |
height |
void wlmtk_window_request_resize | ( | wlmtk_window_t * | window_ptr, |
uint32_t | edges | ||
) |
Requests the window to be resized.
Requires the window to be mapped (to a workspace), and forwards the call to wlmtk_workspace_begin_window_resize.
window_ptr | |
edges |
void wlmtk_window_request_shaded | ( | wlmtk_window_t * | window_ptr, |
bool | shaded | ||
) |
Requests the window to be "shaded", ie. rolled-up to just the title bar.
This is supported only for server-side decorated windows.
window_ptr | |
shaded |
void wlmtk_window_serial | ( | wlmtk_window_t * | window_ptr, |
uint32_t | serial | ||
) |
Updates the window state to what was requested at the serial
.
Used for example when resizing a window from the top or left edges. In that case, wlmtk_content_request_size may be asynchronous and returns a serial. The surface is expected to call wlmtk_window_serial with the returned serial when the size is committed. Only then, the corresponding positional update on the top/left edges are supposed to be applied.
wlmtk_window_t::organic_size will be updated, if there was no pending update: Meaning that the commit originated not from an earlier wlmtk_window_request_position_and_size or wlmtk_window_request_maximized call.
window_ptr | |
serial |
void wlmtk_window_set_activated | ( | wlmtk_window_t * | window_ptr, |
bool | activated | ||
) |
Sets the window as activated, depending on the argument's value.
An activated window will have keyboard focus and would have distinct decorations to indicate state.
window_ptr | |
activated |
void wlmtk_window_set_output | ( | wlmtk_window_t * | window_ptr, |
struct wlr_output * | wlr_output_ptr | ||
) |
Sets the output for the window. Used for fullscreen requests.
window_ptr | |
wlr_output_ptr | Output to consider when requesting a window as fullscreen. Can be NULL to indicate no preference. |
void wlmtk_window_set_position | ( | wlmtk_window_t * | window_ptr, |
int | x, | ||
int | y | ||
) |
Sets the window's position. This is a synchronous operation.
Updates the position in wlmtk_window_t::organic_size.
window_ptr | |
x | |
y |
void wlmtk_window_set_properties | ( | wlmtk_window_t * | window_ptr, |
uint32_t | properties | ||
) |
Sets the window's properties.
window_ptr | |
properties | See wlmtk_window_property_t. |
void wlmtk_window_set_server_side_decorated | ( | wlmtk_window_t * | window_ptr, |
bool | decorated | ||
) |
Sets whether to have server-side decorations for this window.
window_ptr | |
decorated |
void wlmtk_window_set_title | ( | wlmtk_window_t * | window_ptr, |
const char * | title_ptr | ||
) |
Sets the title for the window.
If title_ptr
is NULL, a generic name is set.
window_ptr | |
title_ptr | May be NULL. |
void wlmtk_window_set_workspace | ( | wlmtk_window_t * | window_ptr, |
wlmtk_workspace_t * | workspace_ptr | ||
) |
Sets wlmtk_window_t::workspace_ptr.
Protected method, to be called only from wlmtk_workspace_t.
window_ptr | |
workspace_ptr |
|
static |
Virtual method table for the fake window itself.
|
static |
Default properties. Override by wlmtk_window_set_properties.
|
static |
Virtual method table for the window itself.
|
static |
Tile style used in tests.
|
static |
Virtual method table for the window's container superclass.
|
static |
Virtual method table for the window's element superclass.
const bs_test_case_t wlmtk_window_test_cases[] |
Unit tests for window.