首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XDG-Shell:如何更改窗口大小?

XDG-Shell:如何更改窗口大小?
EN

Stack Overflow用户
提问于 2018-01-19 03:12:34
回答 1查看 632关注 0票数 0

我添加了xdg-shell v5到应用程序中来绘制窗口。当我发送set_fullscreen或set_maximize命令时,我在configure事件中看到正确设置的窗口状态和正确的大小,但没有任何反应。

我的配置事件函数:

代码语言:javascript
复制
    static void
xdg_surface_handle_configure(void *data,
              struct xdg_surface *xdg_surface,
              int32_t width,
              int32_t height,
              struct wl_array *states,
              uint32_t serial) {
    printf("Configure event got, width: %d, height: %d\n", width, height);
    VirtIOGPU *g = (VirtIOGPU*) data;

    g->window_state.activated = g->window_state.fullscreen =
    g->window_state.maximized = g->window_state.resizing = false;

    uint32_t *state;
    wl_array_for_each(state, states) {
        if(*state == XDG_SURFACE_STATE_MAXIMIZED) {
            printf("Surface state: XDG_SURFACE_STATE_MAXIMIZED\n");
            g->window_state.maximized = true;
        } else if(*state == XDG_SURFACE_STATE_FULLSCREEN) {
            printf("Surface state: XDG_SURFACE_STATE_FULLSCREEN\n");
            g->window_state.fullscreen = true;
        } else if(*state == XDG_SURFACE_STATE_RESIZING) {
            printf("Surface state: XDG_SURFACE_STATE_RESIZING\n");
            g->window_state.resizing = true;
        } else if(*state == XDG_SURFACE_STATE_ACTIVATED) {
            printf("Surface state: XDG_SURFACE_STATE_ACTIVATED\n");
            g->window_state.activated = true;
        }
    }

    if (width > 0 && height > 0) {
        g->prev_width = g->width;
        g->prev_height = g->height;
        g->width = width;
        g->height = height;
    } else {
        g->width = g->prev_width;
        g->height = g->prev_height;
    }

    xdg_surface_ack_configure(xdg_surface, serial);

    wl_surface_damage(g->surface, 0, 0, g->width, g->height);
    wl_surface_commit(g->surface);
    wl_display_dispatch_pending(g->display);
    wl_display_flush(g->display);
}

那么,如何在我发送set_maximized之后看到最大化的窗口?是否有可能以编程方式取消最小化窗口(现在由Super+Tab实现)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-01 16:49:04

您的客户端可能需要将具有正确尺寸的新缓冲区附加并提交到表面。compositor已经完成了它应该做的所有事情,并期望您的客户端调整大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48328720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档