Files
lcdproc/server/screen.c
T

170 lines
3.0 KiB
C
Raw Normal View History

/*
* screen.c
* This file is part of LCDd, the lcdproc server.
*
* This file is released under the GNU General Public License. Refer to the
* COPYING file distributed with this package.
*
* Copyright (c) 1999, William Ferrell, Scott Scriven
*
*
* Does screen management
*
*/
1999-12-09 23:15:14 +00:00
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
2001-11-29 14:09:13 +00:00
#include "shared/report.h"
1999-12-09 23:15:14 +00:00
2001-12-30 00:15:25 +00:00
#include "drivers.h"
1999-12-09 23:15:14 +00:00
#include "clients.h"
#include "widget.h"
#include "screenlist.h"
#include "screen.h"
2002-06-29 16:37:18 +00:00
#include "menuscreens.h"
#include "main.h"
#include "render.h"
1999-12-09 23:15:14 +00:00
2001-09-28 14:23:41 +00:00
int default_duration = 0;
int default_timeout = -1;
Screen *
screen_create (char * id, Client * client)
1999-12-09 23:15:14 +00:00
{
Screen *s;
1999-12-09 23:15:14 +00:00
s = malloc (sizeof (Screen));
2000-04-03 22:13:57 +00:00
if (!s) {
report(RPT_ERR, "screen_create: Error allocating");
return NULL;
}
if (!id) {
report (RPT_ERR, "screen_create: Need id string");
return NULL;
}
/* Client can be NULL for serverscreens and other client-less screens */
s->id = strdup(id);
if (!s->id) {
report(RPT_ERR, "screen_create: Error allocating");
2000-04-03 22:13:57 +00:00
return NULL;
}
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
s->name = NULL;
s->priority = DEFAULT_SCREEN_PRIORITY;
2001-09-25 14:03:13 +00:00
s->duration = default_duration;
s->backlight = BACKLIGHT_OPEN;
s->heartbeat = HEARTBEAT_OPEN;
s->width = display_props->width;
s->height = display_props->height;
s->keys = NULL;
s->client = client;
s->widgetlist = NULL;
s->timeout = default_timeout; /*ignored unless greater than 0.*/
s->backlight = BACKLIGHT_OPEN; /*Lets the screen do it's own*/
2001-12-30 00:15:25 +00:00
/*or do what the client says.*/
2002-05-26 19:21:23 +00:00
s->cursor = CURSOR_OFF;
s->cursor_x = 1;
s->cursor_y = 1;
2001-11-29 14:09:13 +00:00
s->widgetlist = LL_new ();
if (!s->widgetlist) {
report(RPT_ERR, "screen_create: Error allocating");
2000-04-03 22:13:57 +00:00
return NULL;
}
1999-12-09 23:15:14 +00:00
2002-06-28 23:35:55 +00:00
menuscreen_add_screen (s);
2000-04-03 22:13:57 +00:00
return s;
1999-12-09 23:15:14 +00:00
}
int
screen_destroy (Screen * s)
1999-12-09 23:15:14 +00:00
{
Widget *w;
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
if (!s)
return -1;
2002-06-28 23:35:55 +00:00
menuscreen_remove_screen (s);
screenlist_remove (s);
for (w=LL_GetFirst(s->widgetlist); w; w=LL_GetNext(s->widgetlist)) {
2001-12-30 00:15:25 +00:00
/* Free a widget...*/
2000-04-03 22:13:57 +00:00
widget_destroy (w);
}
LL_Destroy (s->widgetlist);
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
if (s->id)
free (s->id);
if (s->name)
free (s->name);
if (s->keys)
free (s->keys);
2000-04-03 22:13:57 +00:00
free (s);
2000-04-03 22:13:57 +00:00
return 0;
1999-12-09 23:15:14 +00:00
}
int
screen_add_widget (Screen * s, Widget * w)
1999-12-09 23:15:14 +00:00
{
report (RPT_INFO, "screen_add_widget(%s,%s)", s->id, w->id);
if (!s)
return -1;
if (!w)
return 1;
1999-12-09 23:15:14 +00:00
LL_Push (s->widgetlist, (void *) w);
return 0;
}
int
screen_remove_widget (Screen * s, Widget * w)
{
report (RPT_INFO, "screen_remove_widget(%s,%s)", s->id, w->id);
if (!s)
return -1;
if (!w)
return 1;
LL_Remove (s->widgetlist, (void *) w);
return 0;
}
Widget *
screen_find_widget (Screen * s, char *id)
{
Widget * w;
if (!s)
2000-04-03 22:13:57 +00:00
return NULL;
if (!id)
return NULL;
1999-12-09 23:15:14 +00:00
debug (RPT_DEBUG, "screen_find_widget(%s,%s)", s->id, id);
for ( w=LL_GetFirst(s->widgetlist); w; w=LL_GetNext(s->widgetlist) ) {
if (0 == strcmp (w->id, id)) {
debug (RPT_DEBUG, "screen_find_widget: Found %s", id);
return w;
2000-04-03 22:13:57 +00:00
}
/* Search subscreens recursively */
if (w->type == WID_FRAME) {
w = widget_search_subs (w, id);
if (w)
return w;
}
}
debug (RPT_DEBUG, "screen_find_widget: Not found");
2000-04-03 22:13:57 +00:00
return NULL;
1999-12-09 23:15:14 +00:00
}