Ipc function cleanups/changes.

SVN revision: 13358
This commit is contained in:
Kim Woelders 2005-02-13 13:58:50 +00:00
parent fad7f96620
commit 45ca4ec194
3 changed files with 144 additions and 296 deletions

View File

@ -1351,6 +1351,19 @@ ImageclassIpc(const char *params, Client * c __UNUSED__)
word(params, 1, param1);
word(params, 2, param2);
if (!strncmp(param1, "list", 2))
{
ImageClass **lst;
int num, i;
lst = (ImageClass **) ListItemType(&num, LIST_TYPE_ICLASS);
for (i = 0; i < num; i++)
IpcPrintf("%s\n", lst[i]->name);
if (lst)
Efree(lst);
return;
}
if (!strcmp(param2, "create"))
{
}
@ -1507,8 +1520,8 @@ IpcItem ImageclassIpcArray[] = {
{
ImageclassIpc,
"imageclass", NULL,
"Create/delete/modify/apply an ImageClass",
"This doesn't do anything yet\n"}
"List imageclasses, create/delete/modify/apply an imageclass",
NULL}
,
};
#define N_IPC_FUNCS (sizeof(ImageclassIpcArray)/sizeof(IpcItem))

404
src/ipc.c
View File

@ -121,7 +121,7 @@ SetEwinBoolean(const char *txt, char *item, const char *value, int set)
/* The IPC functions */
static void
IPC_Xinerama(const char *params __UNUSED__, Client * c __UNUSED__)
IPC_Screen(const char *params __UNUSED__, Client * c __UNUSED__)
{
#ifdef HAS_XINERAMA
if (Mode.display.xinerama_active)
@ -131,22 +131,27 @@ IPC_Xinerama(const char *params __UNUSED__, Client * c __UNUSED__)
screens = XineramaQueryScreens(disp, &num);
IpcPrintf("Xinerama active:\n");
IpcPrintf("Head Screen X-Origin Y-Origin Width Height\n");
for (i = 0; i < num; i++)
{
IpcPrintf("Head %d\nscreen # %d\nx origin: %d\ny origin: %d\n"
"width: %d\nheight: %d\n\n", i, screens[i].screen_number,
IpcPrintf(" %2d %2d %5d %5d %5d %5d\n",
i, screens[i].screen_number,
screens[i].x_org, screens[i].y_org, screens[i].width,
screens[i].height);
}
XFree(screens);
return;
}
else
{
IpcPrintf("Xinerama is not active on your system");
IpcPrintf("Xinerama is not active\n");
}
#else
IpcPrintf("Xinerama is disabled on your system");
#endif
IpcPrintf("Head Screen X-Origin Y-Origin Width Height\n");
IpcPrintf(" %2d %2d %5d %5d %5d %5d\n",
0, VRoot.scr, 0, 0, VRoot.w, VRoot.h);
}
static void
@ -155,116 +160,27 @@ IPC_Nop(const char *params __UNUSED__, Client * c __UNUSED__)
IpcPrintf("nop");
}
/* Should be elsewhere */
static void
IPC_GeneralInfo(const char *params, Client * c)
IPC_Border(const char *params, Client * c)
{
char buf[FILEPATH_LEN_MAX];
buf[0] = 0;
if (params)
if (!params)
{
if (!strcmp(params, "screen_size"))
{
Esnprintf(buf, sizeof(buf), "screen_size: %d %d", VRoot.w,
VRoot.h);
}
else
{
Esnprintf(buf, sizeof(buf), "Error: unknown info requested");
}
}
else
{
Esnprintf(buf, sizeof(buf), "Error: no info requested");
IpcPrintf("Please specify...\n");
return;
}
if (buf[0])
CommsSend(c, buf);
}
static void
IPC_ListClassMembers(const char *params, Client * c)
{
char *buf = NULL;
char buf2[FILEPATH_LEN_MAX];
int num, i;
if (params)
if (!strncmp(params, "list", 2))
{
if (!strcmp(params, "borders"))
{
Border **lst;
Border **lst;
int num, i;
lst = (Border **) ListItemType(&num, LIST_TYPE_BORDER);
for (i = 0; i < num; i++)
{
buf2[0] = 0;
Esnprintf(buf2, sizeof(buf2), "%s\n", lst[i]->name);
if (buf)
buf = realloc(buf, strlen(buf) + strlen(buf2) + 1);
else
{
buf = malloc(strlen(buf2) + 1);
buf[0] = 0;
}
strcat(buf, buf2);
}
if (lst)
Efree(lst);
}
else if (!strcmp(params, "text"))
{
TextClass **lst;
lst = (TextClass **) ListItemType(&num, LIST_TYPE_TCLASS);
for (i = 0; i < num; i++)
{
buf2[0] = 0;
Esnprintf(buf2, sizeof(buf2), "%s\n", lst[i]->name);
if (buf)
buf = realloc(buf, strlen(buf) + strlen(buf2) + 1);
else
{
buf = malloc(strlen(buf2) + 1);
buf[0] = 0;
}
strcat(buf, buf2);
}
if (lst)
Efree(lst);
}
else if (!strcmp(params, "images"))
{
ImageClass **lst;
lst = (ImageClass **) ListItemType(&num, LIST_TYPE_ICLASS);
for (i = 0; i < num; i++)
{
buf2[0] = 0;
Esnprintf(buf2, sizeof(buf2), "%s\n", lst[i]->name);
if (buf)
buf = realloc(buf, strlen(buf) + strlen(buf2) + 1);
else
{
buf = malloc(strlen(buf2) + 1);
buf[0] = 0;
}
strcat(buf, buf2);
}
if (lst)
Efree(lst);
}
else
CommsSend(c, "Error: unknown class selected");
}
else
CommsSend(c, "Error: no class selected");
if (buf)
{
CommsSend(c, buf);
Efree(buf);
lst = (Border **) ListItemType(&num, LIST_TYPE_BORDER);
for (i = 0; i < num; i++)
IpcPrintf("%s\n", lst[i]->name);
if (lst)
Efree(lst);
return;
}
}
@ -277,181 +193,111 @@ IPC_DialogOK(const char *params, Client * c __UNUSED__)
IpcPrintf("Error: No text for dialog specified\n");
}
static void
IPC_MoveMode(const char *params, Client * c)
static int
CfgStrlistIndex(const char **list, const char *str)
{
char buf[FILEPATH_LEN_MAX];
int i;
buf[0] = 0;
if (params)
{
if (!strcmp(params, "opaque"))
{
Conf.movres.mode_move = 0;
}
else if (!strcmp(params, "lined"))
{
Conf.movres.mode_move = 1;
}
else if (!strcmp(params, "box"))
{
Conf.movres.mode_move = 2;
}
else if (!strcmp(params, "shaded"))
{
Conf.movres.mode_move = 3;
}
else if (!strcmp(params, "semi-solid"))
{
Conf.movres.mode_move = 4;
}
else if (!strcmp(params, "translucent"))
{
Conf.movres.mode_move = 5;
}
else if (!strcmp(params, "?"))
{
if (Conf.movres.mode_move)
{
if (Conf.movres.mode_move == 1)
Esnprintf(buf, sizeof(buf), "movemode: lined");
else if (Conf.movres.mode_move == 2)
Esnprintf(buf, sizeof(buf), "movemode: box");
else if (Conf.movres.mode_move == 3)
Esnprintf(buf, sizeof(buf), "movemode: shaded");
else if (Conf.movres.mode_move == 4)
Esnprintf(buf, sizeof(buf), "movemode: semi-solid");
else if (Conf.movres.mode_move == 5)
Esnprintf(buf, sizeof(buf), "movemode: translucent");
}
else
{
Esnprintf(buf, sizeof(buf), "movemode: opaque");
}
}
else
{
Esnprintf(buf, sizeof(buf), "Error: unknown mode specified");
}
}
else
{
Esnprintf(buf, sizeof(buf), "Error: no mode specified");
}
if (buf[0])
CommsSend(c, buf);
for (i = 0; list[i]; i++)
if (!strcmp(list[i], str))
return i;
return -1;
}
static const char *MovResCfgMoveModes[] = {
"opaque", "lined", "box", "shaded", "semi-solid", "translucent", NULL
};
static const char *MovResCfgResizeModes[] = {
"opaque", "lined", "box", "shaded", "semi-solid", NULL
};
static const char *MovResCfgInfoModes[] = {
"never", "center", "corner", NULL
};
static void
IPC_ResizeMode(const char *params, Client * c)
IPC_MoveResize(const char *params, Client * c __UNUSED__)
{
char buf[FILEPATH_LEN_MAX];
char param1[32];
char param2[32];
int i;
buf[0] = 0;
if (params)
if (!params)
{
if (!strcmp(params, "opaque"))
IpcPrintf("Please specify...\n");
return;
}
param1[0] = param2[0] = '\0';
sscanf(params, "%31s %31s", param1, param2);
if (!strncmp(param1, "move", 2))
{
if (param2[0] == '\n' || param2[0] == '?')
{
Conf.movres.mode_resize = 0;
if (Conf.movres.mode_move < 0 || Conf.movres.mode_move > 5)
Conf.movres.mode_move = 0;
IpcPrintf("Move mode: %s\n",
MovResCfgMoveModes[Conf.movres.mode_move]);
return;
}
else if (!strcmp(params, "lined"))
i = CfgStrlistIndex(MovResCfgMoveModes, param2);
if (i >= 0)
{
Conf.movres.mode_resize = 1;
}
else if (!strcmp(params, "box"))
{
Conf.movres.mode_resize = 2;
}
else if (!strcmp(params, "shaded"))
{
Conf.movres.mode_resize = 3;
}
else if (!strcmp(params, "semi-solid"))
{
Conf.movres.mode_resize = 4;
}
else if (!strcmp(params, "?"))
{
if (Conf.movres.mode_resize)
{
if (Conf.movres.mode_resize == 1)
Esnprintf(buf, sizeof(buf), "resizemode: lined");
else if (Conf.movres.mode_resize == 2)
Esnprintf(buf, sizeof(buf), "resizemode: box");
else if (Conf.movres.mode_resize == 3)
Esnprintf(buf, sizeof(buf), "resizemode: shaded");
else if (Conf.movres.mode_resize == 4)
Esnprintf(buf, sizeof(buf), "resizemode: semi-solid");
}
else
{
Esnprintf(buf, sizeof(buf), "resizemode: opaque");
}
Conf.movres.mode_move = i;
}
else
{
Esnprintf(buf, sizeof(buf), "Error: unknown mode specified");
IpcPrintf("Move mode not found: %s\n", param2);
}
}
else
else if (!strncmp(param1, "resize", 2))
{
Esnprintf(buf, sizeof(buf), "Error: no mode specified");
}
if (buf[0])
CommsSend(c, buf);
}
static void
IPC_GeomInfoMode(const char *params, Client * c)
{
char buf[FILEPATH_LEN_MAX];
buf[0] = 0;
if (params)
{
if (!strcmp(params, "never"))
if (param2[0] == '\n' || param2[0] == '?')
{
Conf.movres.mode_info = 0;
if (Conf.movres.mode_resize < 0 || Conf.movres.mode_resize > 4)
Conf.movres.mode_resize = 0;
IpcPrintf("Resize mode: %s\n",
MovResCfgResizeModes[Conf.movres.mode_resize]);
return;
}
else if (!strcmp(params, "center"))
i = CfgStrlistIndex(MovResCfgResizeModes, param2);
if (i >= 0)
{
Conf.movres.mode_info = 1;
}
else if (!strcmp(params, "corner"))
{
Conf.movres.mode_info = 2;
}
else if (!strcmp(params, "?"))
{
if (Conf.movres.mode_info)
{
if (Conf.movres.mode_info == 1)
Esnprintf(buf, sizeof(buf), "geominfomode: center");
else if (Conf.movres.mode_info == 2)
Esnprintf(buf, sizeof(buf), "geominfomode: corner");
}
else
{
Esnprintf(buf, sizeof(buf), "geominfomode: never");
}
Conf.movres.mode_resize = i;
}
else
{
Esnprintf(buf, sizeof(buf), "Error: unknown mode specified");
IpcPrintf("Resize mode not found: %s\n", param2);
}
}
else
{
Esnprintf(buf, sizeof(buf), "Error: no mode specified");
}
if (buf[0])
CommsSend(c, buf);
}
else if (!strncmp(param1, "info", 2))
{
if (param2[0] == '\n' || param2[0] == '?')
{
if (Conf.movres.mode_info < 0 || Conf.movres.mode_info > 2)
Conf.movres.mode_info = 1;
IpcPrintf("Info mode: %s\n",
MovResCfgInfoModes[Conf.movres.mode_info]);
return;
}
i = CfgStrlistIndex(MovResCfgInfoModes, param2);
if (i >= 0)
{
Conf.movres.mode_info = i;
}
else
{
IpcPrintf("Info mode not found: %s\n", param2);
}
}
}
static void
@ -1647,40 +1493,19 @@ IpcItem IPCArray[] = {
" (i.e. 0.5) or greater (1.3, 3.5, etc)\n"},
#endif
{
IPC_MoveMode,
"move_mode", "smm",
"Toggle the Window move mode",
"use \"move_mode <opaque/lined/box/shaded/semi-solid/translucent>\" "
"to set\nuse \"move_mode ?\" to get the current mode\n"},
{
IPC_ResizeMode,
"resize_mode", "srm",
"Toggle the Window resize mode",
"use \"resize_mode <opaque/lined/box/shaded/semi-solid>\" "
"to set\nuse \"resize_mode ?\" to get the current mode\n"},
{
IPC_GeomInfoMode,
"geominfo_mode", "sgm",
"Change position of geometry info display during Window move or resize",
"use \"geominfo_mode <center/corner/never>\" "
"to set\nuse \"geominfo_mode ?\" to get the current mode\n"},
IPC_MoveResize,
"movres", "mr",
"Show/set Window move/resize/geometry info modes",
" movres move <?/opaque/lined/box/shaded/semi-solid/translucent>\n"
" movres resize <?/opaque/lined/box/shaded/semi-solid>\n"
" movres info <?/never/center/corner>\n"},
{
IPC_DialogOK,
"dialog_ok", "dok",
"Pop up a dialog box with an OK button",
"use \"dialog_ok <message>\" to pop up a dialog box\n"},
{
IPC_ListClassMembers,
"list_class", "cl",
"List all members of a class",
"use \"list_class <classname>\" to get back a list of class members\n"
"available classes are:\n" "actions\n" "borders\n" "text\n" "images\n"},
{
IPC_GeneralInfo,
"general_info", NULL,
"Retrieve some general information",
"use \"general_info <info>\" to retrieve information\n"
"available info is: screen_size\n"},
IPC_Border, "border", NULL, "List available borders\n", NULL},
#if !USE_LIBC_MALLOC
{
IPC_MemDebug,
@ -1695,10 +1520,7 @@ IpcItem IPCArray[] = {
"and the chunk size.\n"},
#endif
{
IPC_Xinerama,
"xinerama", NULL,
"Return xinerama information about your current system",
NULL},
IPC_Screen, "screen", NULL, "Return screen information\n", NULL},
{
SnapIpcFunc,
"list_remember", "rl",

View File

@ -510,10 +510,10 @@ TextclassSighan(int sig, void *prm __UNUSED__)
static void
TextclassIpc(const char *params, Client * c __UNUSED__)
{
char pq;
char param1[FILEPATH_LEN_MAX];
char param2[FILEPATH_LEN_MAX];
char param3[FILEPATH_LEN_MAX];
char pq;
TextClass *tc;
if (!params)
@ -529,6 +529,19 @@ TextclassIpc(const char *params, Client * c __UNUSED__)
word(params, 1, param1);
word(params, 2, param2);
if (!strncmp(param1, "list", 2))
{
TextClass **lst;
int num, i;
lst = (TextClass **) ListItemType(&num, LIST_TYPE_TCLASS);
for (i = 0; i < num; i++)
IpcPrintf("%s\n", lst[i]->name);
if (lst)
Efree(lst);
return;
}
if (!param1[0])
{
IpcPrintf("TextClass not specified\n");
@ -620,8 +633,8 @@ IpcItem TextclassIpcArray[] = {
{
TextclassIpc,
"textclass", NULL,
"Create/Delete/Modify/apply a TextClass",
"This doesn't do anything yet\n"}
"List textclasses, create/delete/modify/apply a textclass",
NULL}
,
};
#define N_IPC_FUNCS (sizeof(TextclassIpcArray)/sizeof(IpcItem))