mirror of https://github.com/MidnightCommander/mc
115 lines
2.9 KiB
C
115 lines
2.9 KiB
C
/* XView Action Icons (for Drag and Drop).
|
|
Copyright (C) 1995 Jakub Jelinek.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|
|
|
#include <config.h>
|
|
|
|
#include <stdlib.h>
|
|
#include "setup.h"
|
|
#include "profile.h"
|
|
#include "xvmain.h"
|
|
#include "ext.h"
|
|
#include "mad.h"
|
|
|
|
#ifdef HAVE_XPM_SHAPE
|
|
#include "xvicon.h"
|
|
|
|
extern char *regex_command_title;
|
|
|
|
extern Display *dpy;
|
|
|
|
void add_action_icon (char *filename, char *geometry)
|
|
{
|
|
char *iconname, *title, *p, *base = x_basename (filename);
|
|
int x, y, z;
|
|
XpmIcon *icon;
|
|
|
|
iconname = regex_command (base, "Icon", NULL, NULL);
|
|
if (iconname == NULL)
|
|
iconname = strdup ("file.xpm");
|
|
if (*iconname != '/') {
|
|
p = copy_strings (ICONDIR, iconname, NULL);
|
|
free (iconname);
|
|
iconname = p;
|
|
}
|
|
title = regex_command_title;
|
|
if (title == NULL)
|
|
title = strdup (base);
|
|
else {
|
|
char *q, *r;
|
|
|
|
y = strlen (filename);
|
|
z = strlen (base);
|
|
for (q = title, x = 1; *q; q++, x++)
|
|
if (*q == '%') {
|
|
if (q [1] == 'p')
|
|
x += z - 2;
|
|
else if (q [1] == 'd')
|
|
x += y - 2;
|
|
}
|
|
r = xmalloc (x, "Icon Title");
|
|
for (q = title, p = r; *q; q++, p++)
|
|
if (*q == '%') {
|
|
if (q [1] == 'p') {
|
|
strcpy (p, base);
|
|
p += z - 1;
|
|
q++;
|
|
} else if (q [1] == 'd') {
|
|
strcpy (p, filename);
|
|
p += y - 1;
|
|
q++;
|
|
} else
|
|
*p = *q;
|
|
} else
|
|
*p = *q;
|
|
*p = 0;
|
|
free (title);
|
|
title = r;
|
|
}
|
|
x = atoi (geometry);
|
|
for (p = geometry; *p && (*p < '0' || *p > '9'); p++);
|
|
for (; *p >= '0' && *p <= '9'; p++);
|
|
y = atoi (p);
|
|
icon = CreateXpmIcon (iconname, x, y, title);
|
|
if (icon != NULL) {
|
|
icon->filename = strdup (filename);
|
|
}
|
|
free (iconname);
|
|
free (title);
|
|
XFlush (dpy);
|
|
xv_dispatch_a_bit ();
|
|
}
|
|
#endif
|
|
|
|
void xv_action_icons (void)
|
|
{
|
|
#ifdef HAVE_XPM_SHAPE
|
|
char *key, *value;
|
|
void *keys = profile_init_iterator ("Action Icons", profile_name);
|
|
|
|
xv_dispatch_a_bit ();
|
|
if (keys == NULL) {
|
|
add_action_icon ("/bin/rm", "+45+100");
|
|
add_action_icon ("/usr/bin/lpr", "+45+160");
|
|
}
|
|
|
|
while (keys != NULL) {
|
|
keys = profile_iterator_next (keys, &key, &value);
|
|
add_action_icon (key, value);
|
|
}
|
|
#endif
|
|
}
|