Changeset 7a05d924 in mainline


Ignore:
Timestamp:
2022-10-20T08:05:06Z (2 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7cc30e9
Parents:
1766326
git-author:
Jiri Svoboda <jiri@…> (2022-10-19 18:04:42)
git-committer:
Jiri Svoboda <jiri@…> (2022-10-20 08:05:06)
Message:

Return correct number of windows from display server

But not the caption since the display server does not have it

Location:
uspace
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/taskbar/taskbar.c

    r1766326 r7a05d924  
    174174        }
    175175
    176         rc = wndlist_append(taskbar->wndlist, "Text Editor");
    177         if (rc != EOK) {
    178                 printf("Error adding window list entry.\n");
     176        rc = wndlist_attach_wm(taskbar->wndlist, taskbar->wndmgt);
     177        if (rc != EOK) {
     178                printf("Error attaching window management service.\n");
    179179                goto error;
    180180        }
  • uspace/app/taskbar/types/wndlist.h

    r1766326 r7a05d924  
    4242#include <ui/fixed.h>
    4343#include <ui/resource.h>
     44#include <wndmgt.h>
    4445
    4546/** Taskbar window list entry */
     
    6970        /** Window list entries (of wndlist_entry_t) */
    7071        list_t entries;
     72
     73        /** Window management service */
     74        wndmgt_t *wndmgt;
    7175} wndlist_t;
    7276
  • uspace/app/taskbar/wndlist.c

    r1766326 r7a05d924  
    4949 * @param res UI resource
    5050 * @param fixed Fixed layout to which buttons will be added
     51 * @param wndmgt Window management service
    5152 * @param rwndlist Place to store pointer to new window list
    5253 * @return @c EOK on success or an error code
     
    7172error:
    7273        return rc;
     74}
    7375
     76/** Attach window management service to window list.
     77 *
     78 * @param wndlist Window list
     79 * @param rwndlist Place to store pointer to new window list
     80 * @return @c EOK on success or an error code
     81 */
     82errno_t wndlist_attach_wm(wndlist_t *wndlist, wndmgt_t *wndmgt)
     83{
     84        errno_t rc;
     85        wndmgt_window_list_t *wlist = NULL;
     86        wndmgt_window_info_t *winfo = NULL;
     87        sysarg_t i;
     88
     89        rc = wndmgt_get_window_list(wndmgt, &wlist);
     90        if (rc != EOK)
     91                goto error;
     92
     93        for (i = 0; i < wlist->nwindows; i++) {
     94                rc = wndmgt_get_window_info(wndmgt, wlist->windows[i],
     95                    &winfo);
     96                if (rc != EOK)
     97                        goto error;
     98
     99                rc = wndlist_append(wndlist, winfo->caption);
     100                if (rc != EOK) {
     101                        wndmgt_free_window_info(winfo);
     102                        goto error;
     103                }
     104
     105                wndmgt_free_window_info(winfo);
     106        }
     107
     108        wndlist->wndmgt = wndmgt;
     109        return EOK;
     110error:
     111        if (wlist != NULL)
     112                wndmgt_free_window_list(wlist);
     113        return rc;
    74114}
    75115
     
    90130        wndlist_entry_t *entry = NULL;
    91131        gfx_rect_t rect;
     132        size_t nentries;
    92133        errno_t rc;
     134
     135        /* Number of existing entries */
     136        nentries = list_count(&wndlist->entries);
    93137
    94138        entry = calloc(1, sizeof(wndlist_entry_t));
     
    103147
    104148        if (ui_resource_is_textmode(wndlist->res)) {
    105                 rect.p0.x = 9;
     149                rect.p0.x = 17 * nentries + 9;
    106150                rect.p0.y = 0;
    107                 rect.p1.x = 25;
     151                rect.p1.x = 17 * nentries + 25;
    108152                rect.p1.y = 1;
    109153        } else {
    110                 rect.p0.x = 90;
     154                rect.p0.x = 145 * nentries + 90;
    111155                rect.p0.y = 3;
    112                 rect.p1.x = 230;
     156                rect.p1.x = 145 * nentries + 230;
    113157                rect.p1.y = 29;
    114158        }
  • uspace/app/taskbar/wndlist.h

    r1766326 r7a05d924  
    4040#include <ui/fixed.h>
    4141#include <ui/resource.h>
     42#include <wndmgt.h>
    4243#include "types/wndlist.h"
    4344
    4445extern errno_t wndlist_create(ui_resource_t *, ui_fixed_t *, wndlist_t **);
     46extern errno_t wndlist_attach_wm(wndlist_t *, wndmgt_t *);
    4547extern void wndlist_destroy(wndlist_t *);
    4648extern errno_t wndlist_append(wndlist_t *, const char *);
  • uspace/lib/wndmgt/include/types/wndmgt.h

    r1766326 r7a05d924  
    3636#define _LIBWNDMGT_TYPES_WNDMGT_H_
    3737
     38#include <ipc/services.h>
    3839#include <types/common.h>
    3940
    4041/** Use the default window management service (argument to wndmgt_open() */
    41 #define WNDMGT_DEFAULT NULL
     42#define WNDMGT_DEFAULT SERVICE_NAME_WNDMGT
    4243
    4344struct wndmgt;
  • uspace/srv/hid/display/main.c

    r1766326 r7a05d924  
    242242static void display_wndmgt_conn(ipc_call_t *icall, void *arg)
    243243{
     244        ds_display_t *disp = (ds_display_t *) arg;
    244245        wndmgt_srv_t srv;
    245246
     
    247248        wndmgt_srv_initialize(&srv);
    248249        srv.ops = &wndmgt_srv_ops;
    249         srv.arg = NULL; // XXX
     250        srv.arg = disp;
    250251
    251252        /* Handle connection */
  • uspace/srv/hid/display/wmops.c

    r1766326 r7a05d924  
    3535
    3636#include <errno.h>
    37 //#include <io/log.h>
     37#include <io/log.h>
    3838#include <stdlib.h>
    3939#include <str.h>
    4040#include <wndmgt_srv.h>
    41 //#include "client.h"
    42 //#include "display.h"
    43 //#include "dsops.h"
    44 //#include "seat.h"
    45 //#include "window.h"
     41#include "display.h"
    4642
    4743static errno_t dispwm_get_window_list(void *, wndmgt_window_list_t **);
     
    6258{
    6359        wndmgt_window_list_t *list;
     60        ds_display_t *disp = (ds_display_t *)arg;
     61        ds_window_t *wnd;
     62        unsigned i;
     63
     64        log_msg(LOG_DEFAULT, LVL_DEBUG, "dispwm_get_window_list()");
    6465
    6566        list = calloc(1, sizeof(wndmgt_window_list_t));
     
    6768                return ENOMEM;
    6869
    69         list->nwindows = 2;
    70         list->windows = calloc(2, sizeof(sysarg_t));
     70        /* Count the number of windows */
     71        list->nwindows = 0;
     72        wnd = ds_display_first_window(disp);
     73        while (wnd != NULL) {
     74                ++list->nwindows;
     75                wnd = ds_display_next_window(wnd);
     76        }
     77
     78        /* Allocate array for window IDs */
     79        list->windows = calloc(list->nwindows, sizeof(sysarg_t));
    7180        if (list->windows == NULL) {
    7281                free(list);
     
    7483        }
    7584
    76         list->windows[0] = 1;
    77         list->windows[1] = 2;
     85        /* Fill in window IDs */
     86        i = 0;
     87        wnd = ds_display_first_window(disp);
     88        while (wnd != NULL) {
     89                list->windows[i++] = wnd->id;
     90                wnd = ds_display_next_window(wnd);
     91        }
    7892
    7993        *rlist = list;
     
    8498    wndmgt_window_info_t **rinfo)
    8599{
     100
    86101/*      ds_client_t *client = (ds_client_t *) arg;
    87102        ds_window_t *wnd;
     
    101116        wndmgt_window_info_t *info;
    102117
     118        log_msg(LOG_DEFAULT, LVL_DEBUG, "dispwm_get_window_info()");
     119
    103120        info = calloc(1, sizeof(wndmgt_window_info_t));
    104121        if (info == NULL)
     
    117134static errno_t dispwm_activate_window(void *arg, sysarg_t wnd_id)
    118135{
     136        log_msg(LOG_DEFAULT, LVL_DEBUG, "dispwm_activate_window()");
    119137        (void)arg;
    120138        (void)wnd_id;
     
    124142static errno_t dispwm_close_window(void *arg, sysarg_t wnd_id)
    125143{
     144        log_msg(LOG_DEFAULT, LVL_DEBUG, "dispwm_close_window()");
    126145        (void)arg;
    127146        (void)wnd_id;
Note: See TracChangeset for help on using the changeset viewer.