Changeset 39f67f1 in mainline


Ignore:
Timestamp:
2026-02-18T20:21:10Z (32 hours ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
b769ca0
Parents:
26edcd6
Message:

Make maximize/restore work correctly in fullscreen UI.

Location:
uspace/lib/ui
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/private/window.h

    r26edcd6 r39f67f1  
    8282        /** Display position (if fullscreen mode) */
    8383        gfx_coord2_t dpos;
     84        /** Normal display position when not maximized (if fullscreen mode) */
     85        gfx_coord2_t normal_dpos;
    8486        /** Application area bitmap */
    8587        gfx_bitmap_t *app_bmp;
  • uspace/lib/ui/src/window.c

    r26edcd6 r39f67f1  
    239239}
    240240
     241static void ui_window_set_dpos(ui_window_t *window, gfx_coord2_t *dpos)
     242{
     243        window->dpos = *dpos;
     244        if (window->xgc != NULL)
     245                xlate_gc_set_off(window->xgc, &window->dpos);
     246}
     247
    241248/** Create window's system menu.
    242249 *
     
    338345        mem_gc_t *memgc = NULL;
    339346        xlate_gc_t *xgc = NULL;
     347        gfx_coord2_t dpos;
    340348        errno_t rc;
    341349
     
    482490        if (ui->display == NULL) {
    483491                ui_window_place(window, &ui->rect, &params->rect, &params->prect,
    484                     params->placement, &window->dpos);
    485 
    486                 if (window->xgc != NULL)
    487                         xlate_gc_set_off(window->xgc, &window->dpos);
     492                    params->placement, &dpos);
     493                ui_window_set_dpos(window, &dpos);
    488494        }
    489495
     
    549555void ui_window_update_placement(ui_window_t *window)
    550556{
    551         if (window->placement != ui_wnd_place_popup)
     557        gfx_coord2_t dpos;
     558
     559        if (window->placement != ui_wnd_place_popup) {
    552560                ui_window_place(window, &window->ui->rect, &window->rect,
    553561                    NULL, window->placement, &window->dpos);
    554 
    555         if (window->xgc != NULL)
    556                 xlate_gc_set_off(window->xgc, &window->dpos);
     562                ui_window_set_dpos(window, &dpos);
     563        }
    557564
    558565        if (window->placement == ui_wnd_place_full_screen) {
     
    596603        /* Need to repaint if windows are emulated */
    597604        if (ui_is_fullscreen(ui)) {
    598                 ui_paint(ui);
     605                (void)ui_paint(ui);
    599606                /* Send focus event to newly active window */
    600607                nwindow = ui_window_get_active(ui);
     
    709716        gfx_bitmap_alloc_t app_alloc;
    710717        gfx_bitmap_alloc_t win_alloc;
     718        gfx_coord2_t dpos;
    711719        errno_t rc;
    712720
     
    784792                        break;
    785793                }
     794        } else {
     795                /* fullscreen mode or unit tests */
     796                switch (scop) {
     797                case ui_wsc_resize:
     798                        break;
     799                case ui_wsc_maximize:
     800                        window->normal_dpos = window->dpos;
     801                        dpos.x = 0;
     802                        dpos.y = 0;
     803                        ui_window_set_dpos(window, &dpos);
     804                        break;
     805                case ui_wsc_unmaximize:
     806                        ui_window_set_dpos(window, &window->normal_dpos);
     807                        break;
     808                }
    786809        }
    787810
     
    822845                window->app_bmp = app_bmp;
    823846        }
     847
     848        /* Need to repaint UI if windows are emulated */
     849        if (ui_is_fullscreen(window->ui))
     850                (void)ui_paint(window->ui);
    824851
    825852        return EOK;
Note: See TracChangeset for help on using the changeset viewer.