summaryrefslogtreecommitdiff
path: root/applets.c
diff options
context:
space:
mode:
authorBranden Robinson <branden@debian.org>2005-11-06 00:35:41 +0000
committerBranden Robinson <branden@debian.org>2005-11-06 00:35:41 +0000
commitf72ceed5dbbe14bb38e6b07adf7759e2f4c7dbe8 (patch)
tree794a31abf6e18deb779eee70ad18fe78fa194b2e /applets.c
Import vtwm_5.4.7.orig.tar.gz
[dgit import orig vtwm_5.4.7.orig.tar.gz]
Diffstat (limited to 'applets.c')
-rw-r--r--applets.c209
1 files changed, 209 insertions, 0 deletions
diff --git a/applets.c b/applets.c
new file mode 100644
index 0000000..165a25b
--- /dev/null
+++ b/applets.c
@@ -0,0 +1,209 @@
+/*
+ * Copyright 1989 Massachusetts Institute of Technology
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of M.I.T. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission. M.I.T. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**********************************************************************
+ *
+ * applets.c
+ *
+ * Applet region related routines
+ *
+ * 4/26/99 D. J. Hawkey Jr.
+ *
+ **********************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include "twm.h"
+#include "screen.h"
+#include "regions.h"
+#include "gram.h"
+#include "parse.h"
+#include "util.h"
+
+extern void twmrc_error_prefix();
+extern int MatchName();
+
+extern void splitRegionEntry();
+extern int roundEntryUp();
+extern RegionEntry *prevRegionEntry();
+extern void mergeRegionEntries();
+extern void downRegionEntry();
+extern RootRegion *AddRegion();
+
+int appletWidth(tmp_win)
+TwmWindow *tmp_win;
+{
+ /* submitted by Tim Wiess - 8/23/02 */
+ if (Scr->NoBorders || LookInList(Scr->NoBorder, tmp_win->full_name, &tmp_win->class))
+ return tmp_win->attr.width;
+ else
+ return Scr->BorderWidth * 2 + tmp_win->attr.width;
+}
+
+int appletHeight(tmp_win)
+TwmWindow *tmp_win;
+{
+ /* submitted by Tim Wiess - 8/23/02 */
+ /* added 'tmp_win->title_height +' - djhjr - 11/11/03 */
+ if (Scr->NoBorders || LookInList(Scr->NoBorder, tmp_win->full_name, &tmp_win->class))
+ return tmp_win->title_height + tmp_win->attr.height;
+ else
+ return Scr->BorderWidth * 2 + tmp_win->title_height + tmp_win->attr.height;
+}
+
+int PlaceApplet(tmp_win, def_x, def_y, final_x, final_y)
+TwmWindow *tmp_win;
+int def_x, def_y;
+int *final_x, *final_y;
+{
+ RootRegion *rr;
+ RegionEntry *re;
+ int matched, w, h;
+
+ for (rr = Scr->FirstAppletRegion; rr; rr = rr->next)
+ {
+ matched = 0;
+ w = roundEntryUp (appletWidth (tmp_win), rr->stepx);
+ h = roundEntryUp (appletHeight (tmp_win), rr->stepy);
+
+ for (re = rr->entries; re; re = re->next)
+ {
+ if (!matched)
+ {
+ /* these were 'match()' - djhjr - 10/20/01 */
+ if (MatchName(tmp_win->full_name, re->u.name, &re->re, re->type))
+ if (MatchName(tmp_win->class.res_name, re->u.name, &re->re, re->type))
+ if (MatchName(tmp_win->class.res_class, re->u.name, &re->re, re->type))
+ continue;
+
+ matched = 1;
+ }
+
+ if (re->usedby) continue;
+/* don't include grid spacing - djhjr - 5/22/99
+ if (re->w < w || re->h < h) continue;
+*/
+ if (re->w < appletWidth(tmp_win) || re->h < appletHeight(tmp_win))
+ continue;
+
+ splitRegionEntry (re, rr->grav1, rr->grav2, w, h);
+ re->usedby = USEDBY_TWIN;
+ re->u.twm_win = tmp_win;
+
+/* evenly spaced applet placement - djhjr - 4/24/99
+ *final_x = re->x + (re->w - appletWidth (tmp_win)) / 2;
+ *final_y = re->y + (re->h - appletHeight (tmp_win)) / 2;
+*/
+ *final_x = re->x;
+ *final_y = re->y;
+
+ /* adjust for region gravity - djhjr 4/26/99 */
+ if (rr->grav2 == D_EAST)
+ *final_x += re->w - appletWidth(tmp_win);
+ if (rr->grav1 == D_SOUTH)
+ *final_y += re->h - appletHeight(tmp_win);
+
+ return 1;
+ }
+ }
+
+ *final_x = def_x;
+ *final_y = def_y;
+
+ return 0;
+}
+
+static RegionEntry *
+FindAppletEntry (tmp_win, rrp)
+ TwmWindow *tmp_win;
+ RootRegion **rrp;
+{
+ RootRegion *rr;
+ RegionEntry *re;
+
+ for (rr = Scr->FirstAppletRegion; rr; rr = rr->next) {
+ for (re = rr->entries; re; re=re->next)
+ if (re->u.twm_win == tmp_win) {
+ if (rrp)
+ *rrp = rr;
+ return re;
+ }
+ }
+ return 0;
+}
+
+void
+AppletDown (tmp_win)
+ TwmWindow *tmp_win;
+{
+ RegionEntry *re;
+ RootRegion *rr;
+
+ re = FindAppletEntry (tmp_win, &rr);
+ if (re)
+ downRegionEntry(rr, re);
+}
+
+RootRegion *
+AddAppletRegion(geom, grav1, grav2, stepx, stepy)
+char *geom;
+int grav1, grav2, stepx, stepy;
+{
+ RootRegion *rr;
+
+ rr = AddRegion(geom, grav1, grav2, stepx, stepy);
+
+ if (Scr->LastAppletRegion)
+ Scr->LastAppletRegion->next = rr;
+ Scr->LastAppletRegion = rr;
+ if (!Scr->FirstAppletRegion)
+ Scr->FirstAppletRegion = rr;
+
+ return rr;
+}
+
+void
+AddToAppletList(list_head, name, type)
+RootRegion *list_head;
+char *name;
+short type;
+{
+ RegionEntry *nptr;
+
+ if (!list_head) return; /* ignore empty inserts */
+
+ nptr = (RegionEntry *)malloc(sizeof(RegionEntry));
+ if (nptr == NULL)
+ {
+ twmrc_error_prefix();
+ fprintf (stderr, "unable to allocate %d bytes for RegionEntry\n",
+ sizeof(RegionEntry));
+ Done();
+ }
+
+ nptr->next = list_head->entries;
+ /* djhjr - 10/20/01 */
+ nptr->type = type;
+ nptr->usedby = USEDBY_NAME;
+ nptr->u.name = (char*)strdup(name);
+ list_head->entries = nptr;
+}
+