⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wlist.c

📁 Microwindows genesis was with the NanoGUI project, and is now the primary distribution for both th
💻 C
字号:
/* * NanoWM - Window Manager for Nano-X * * Copyright (C) 2000 Greg Haerr <greg@censoft.com> * Copyright (C) 2000 Alex Holden <alex@linuxhacker.org> */#include <stdio.h>#include <stdlib.h>#define MWINCLUDECOLORS#include "nano-X.h"/* Uncomment this to get debugging output from this file *//*#define DEBUG*/#include "nanowm.h"static win *windows = NULL;/* * Find the windowlist entry for the specified window ID and return a pointer * to it, or NULL if it isn't in the list. */win *find_window(GR_WINDOW_ID wid){	win *w = windows;	Dprintf("Looking for window %d... ", wid);	while(w) {		Dprintf("%d ", w->wid);		if(w->wid == wid) {			Dprintf("found it!\n");			return w;		}		w = w->next;	}	Dprintf("Nope, %d is not in the list\n", wid);	return NULL;}/* * Add a new entry to the front of the windowlist. * Returns -1 on failure or 0 on success. */int add_window(win *window){	win *w;	Dprintf("Adding window %d\n", window->wid);	if(!(w = malloc(sizeof(win)))) return -1;	w->wid = window->wid;	w->pid = window->pid;	w->type = window->type;	w->sizing = GR_FALSE;	/* window->sizing*/	w->active = window->active;	w->clientid = window->clientid;	w->data = window->data;	w->next = windows;	windows = w;	return 0;}/* * Remove an entry from the windowlist. * We must search through the list for it so that we can find the previous * entry in the list and fix the next pointer. The alternative is to add a * prev pointer to the structure which would increase the memory usage. * Returns -1 on failure or 0 on success. */int remove_window(win *window){	win *w = windows;	win *prev = NULL;	while(w) {		if(w == window) {			if(!prev) windows = w->next;			else prev->next = w->next;			if(w->data) free(w->data);			free(w);			return 0;		}		prev = w;		w = w->next;	}	return -1;}/* * Remove an entry and all it's children from the windowlist. * Returns -1 on failure or 0 on success. */int remove_window_and_children(win *window){	win *t, *w = windows;	win *prev = NULL;	GR_WINDOW_ID pid = window->wid;	Dprintf("Removing window %d and children\n", window->wid);	while(w) {		Dprintf("Examining window %d (pid %d)\n", w->wid, w->pid);		if((w->pid == pid) || (w == window)) {			Dprintf("Removing window %d (pid %d)\n", w->wid,								w->pid);			if(prev) prev->next = w->next;			else windows = w->next;			t = w->next;			if(w->data) free(w->data);			free(w);			w = t;			continue;		}		prev = w;		w = w->next;	}	return -1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -