2013-01-20 00:18:36 +01:00
|
|
|
/* -*- compile-command: "make MEMDEBUG=TRUE -j3"; -*- */
|
2003-11-01 06:35:29 +01:00
|
|
|
/*
|
2023-12-19 02:08:51 +01:00
|
|
|
* Copyright 2001 - 2023 by Eric House (xwords@eehouse.org). All rights
|
2007-05-26 16:14:01 +02:00
|
|
|
* reserved.
|
2003-11-01 06:35:29 +01:00
|
|
|
*
|
|
|
|
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _MAIN_H_
|
|
|
|
#define _MAIN_H_
|
|
|
|
|
2007-06-02 04:07:45 +02:00
|
|
|
#ifdef XWFEATURE_BLUETOOTH
|
|
|
|
# include <bluetooth/bluetooth.h> /* for bdaddr_t, which should move */
|
|
|
|
#endif
|
2006-08-26 23:15:20 +02:00
|
|
|
|
2013-01-06 01:08:47 +01:00
|
|
|
#include <sqlite3.h>
|
2020-02-13 06:40:42 +01:00
|
|
|
#include <stdbool.h>
|
2013-01-06 01:08:47 +01:00
|
|
|
|
2003-11-01 06:35:29 +01:00
|
|
|
#include "comtypes.h"
|
|
|
|
#include "util.h"
|
|
|
|
#include "game.h"
|
|
|
|
#include "vtabmgr.h"
|
2014-03-10 03:12:21 +01:00
|
|
|
#include "dictmgr.h"
|
2018-07-05 16:58:50 +02:00
|
|
|
#include "dutil.h"
|
2003-11-01 06:35:29 +01:00
|
|
|
|
|
|
|
typedef struct ServerInfo {
|
|
|
|
XP_U16 nRemotePlayers;
|
|
|
|
/* CommPipeCtxt* pipe; */
|
|
|
|
} ServerInfo;
|
|
|
|
|
|
|
|
typedef struct ClientInfo {
|
|
|
|
} ClientInfo;
|
|
|
|
|
|
|
|
typedef struct LinuxUtilCtxt {
|
|
|
|
UtilVtable* vtable;
|
|
|
|
} LinuxUtilCtxt;
|
|
|
|
|
2013-01-16 15:46:33 +01:00
|
|
|
typedef void (*SockReceiver)( void* closure, int socket );
|
|
|
|
typedef void (*NewSocketProc)( void* closure, int newSock, int oldSock,
|
|
|
|
SockReceiver proc, void* procClosure );
|
|
|
|
|
2020-05-20 22:58:53 +02:00
|
|
|
typedef struct _LaunchParams {
|
2003-11-01 06:35:29 +01:00
|
|
|
/* CommPipeCtxt* pipe; */
|
2013-01-07 15:10:44 +01:00
|
|
|
CurGameInfo pgi;
|
|
|
|
|
2012-09-04 06:33:46 +02:00
|
|
|
GSList* dictDirs;
|
2003-11-01 06:35:29 +01:00
|
|
|
char* fileName;
|
2013-01-07 17:00:47 +01:00
|
|
|
char* dbName;
|
2023-11-18 04:39:45 +01:00
|
|
|
char* localName;
|
2013-01-29 16:42:10 +01:00
|
|
|
sqlite3* pDb; /* null unless opened */
|
2012-09-11 16:26:17 +02:00
|
|
|
XP_U16 saveFailPct;
|
2018-07-15 00:43:42 +02:00
|
|
|
XP_U16 smsSendFailPct;
|
2012-08-22 16:35:18 +02:00
|
|
|
const XP_UCHAR* playerDictNames[MAX_NUM_PLAYERS];
|
2012-07-29 17:37:08 +02:00
|
|
|
#ifdef USE_SQLITE
|
2012-07-27 05:44:33 +02:00
|
|
|
char* dbFileName;
|
|
|
|
XP_U32 dbFileID;
|
2012-07-29 17:37:08 +02:00
|
|
|
#endif
|
2013-01-16 15:46:33 +01:00
|
|
|
void* relayConStorage; /* opaque outside of relaycon.c */
|
2020-05-20 22:58:53 +02:00
|
|
|
void* mqttConStorage;
|
2013-12-11 16:54:26 +01:00
|
|
|
#ifdef XWFEATURE_SMS
|
2013-12-21 03:08:50 +01:00
|
|
|
void* smsStorage;
|
2013-12-11 16:54:26 +01:00
|
|
|
#endif
|
2011-01-24 06:52:26 +01:00
|
|
|
char* pipe;
|
2011-09-30 15:32:21 +02:00
|
|
|
char* nbs;
|
2011-04-10 22:04:05 +02:00
|
|
|
char* bonusFile;
|
2012-10-30 15:01:47 +01:00
|
|
|
#ifdef XWFEATURE_DEVID
|
2013-09-15 06:06:14 +02:00
|
|
|
char* lDevID;
|
2013-01-29 16:42:10 +01:00
|
|
|
XP_Bool noAnonDevid;
|
2015-02-19 15:39:32 +01:00
|
|
|
XP_UCHAR devIDStore[32];
|
2012-10-30 15:01:47 +01:00
|
|
|
#endif
|
2023-08-08 21:07:32 +02:00
|
|
|
const char* cmdsSocket;
|
|
|
|
|
2003-11-01 06:35:29 +01:00
|
|
|
VTableMgr* vtMgr;
|
2014-03-10 03:12:21 +01:00
|
|
|
DictMgrCtxt* dictMgr;
|
2018-07-05 16:58:50 +02:00
|
|
|
XW_DUtilCtxt* dutil;
|
2003-11-01 06:35:29 +01:00
|
|
|
XP_U16 nLocalPlayers;
|
2006-05-17 08:10:24 +02:00
|
|
|
XP_U16 nHidden;
|
2011-08-01 07:23:46 +02:00
|
|
|
XP_U16 gameSeed;
|
2011-06-21 03:55:57 +02:00
|
|
|
XP_S16 dropNthRcvd; /* negative means use for random calc */
|
|
|
|
XP_U16 nPacketsRcvd; /* toward dropNthRcvd */
|
2012-05-24 04:58:03 +02:00
|
|
|
XP_U16 undoRatio;
|
2003-11-01 06:35:29 +01:00
|
|
|
XP_Bool askNewGame;
|
2008-10-26 16:33:21 +01:00
|
|
|
XP_S16 quitAfter;
|
2003-11-01 06:35:29 +01:00
|
|
|
XP_Bool sleepOnAnchor;
|
|
|
|
XP_Bool printHistory;
|
|
|
|
XP_Bool undoWhenDone;
|
|
|
|
XP_Bool verticalScore;
|
2008-12-29 04:09:35 +01:00
|
|
|
XP_Bool hideValues;
|
2022-05-10 00:10:15 +02:00
|
|
|
XP_Bool skipMQTTAdd;
|
2010-01-26 05:14:18 +01:00
|
|
|
XP_Bool showColors;
|
2010-07-17 15:22:42 +02:00
|
|
|
XP_Bool allowPeek;
|
2010-06-18 03:10:32 +02:00
|
|
|
XP_Bool sortNewTiles;
|
2009-11-08 18:25:19 +01:00
|
|
|
XP_Bool skipCommitConfirm;
|
2009-02-28 19:52:44 +01:00
|
|
|
XP_Bool needsNewGame;
|
2003-11-01 06:35:29 +01:00
|
|
|
// XP_Bool mainParams;
|
|
|
|
XP_Bool skipWarnings;
|
|
|
|
XP_Bool showRobotScores;
|
2005-09-03 17:39:15 +02:00
|
|
|
XP_Bool noHeartbeat;
|
2009-09-26 15:47:51 +02:00
|
|
|
XP_Bool duplicatePackets;
|
2010-03-28 18:08:54 +02:00
|
|
|
XP_Bool skipGameOver;
|
2011-07-19 03:07:15 +02:00
|
|
|
XP_Bool useMmap;
|
2013-06-10 15:15:36 +02:00
|
|
|
XP_Bool closeStdin;
|
2020-05-20 22:58:53 +02:00
|
|
|
|
2016-11-09 16:38:41 +01:00
|
|
|
XP_Bool useCurses;
|
2020-05-20 22:58:53 +02:00
|
|
|
void* appGlobals; /* cursesmain or gtkmain sets this */
|
|
|
|
|
2013-08-07 06:10:42 +02:00
|
|
|
XP_Bool useUdp;
|
2017-10-21 21:11:26 +02:00
|
|
|
XP_Bool useHTTP;
|
2018-07-06 06:40:56 +02:00
|
|
|
XP_Bool runSMSTest;
|
2023-03-04 18:36:42 +01:00
|
|
|
XP_Bool rematchOnDone;
|
2017-10-25 04:18:19 +02:00
|
|
|
XP_Bool noHTTPAuto;
|
2020-02-13 06:40:42 +01:00
|
|
|
bool forceNewGame;
|
2020-02-14 06:43:46 +01:00
|
|
|
bool forceInvite;
|
2013-06-27 16:00:36 +02:00
|
|
|
XP_U16 splitPackets;
|
2013-06-25 03:37:49 +02:00
|
|
|
XP_U16 chatsInterval; /* 0 means disabled */
|
2013-12-23 16:16:02 +01:00
|
|
|
XP_U16 askTimeout;
|
2020-01-24 18:05:16 +01:00
|
|
|
int cursesListWinHt;
|
2008-04-08 05:55:53 +02:00
|
|
|
#ifdef XWFEATURE_SEARCHLIMIT
|
|
|
|
XP_Bool allowHintRect;
|
|
|
|
#endif
|
2011-12-07 03:17:55 +01:00
|
|
|
#ifdef XWFEATURE_CROSSHAIRS
|
|
|
|
XP_Bool hideCrosshairs;
|
|
|
|
#endif
|
|
|
|
|
2009-07-09 14:43:51 +02:00
|
|
|
#ifdef XWFEATURE_SLOW_ROBOT
|
|
|
|
XP_U16 robotThinkMin, robotThinkMax;
|
2012-05-03 05:14:42 +02:00
|
|
|
XP_U16 robotTradePct;
|
2009-07-09 14:43:51 +02:00
|
|
|
#endif
|
2020-04-24 22:33:40 +02:00
|
|
|
#ifdef XWFEATURE_ROBOTPHONIES
|
2020-04-22 05:55:48 +02:00
|
|
|
XP_U16 makePhonyPct;
|
2020-04-24 22:33:40 +02:00
|
|
|
#endif
|
2014-12-02 15:49:35 +01:00
|
|
|
XP_Bool commsDisableds[COMMS_CONN_NTYPES][2];
|
2009-07-09 14:43:51 +02:00
|
|
|
|
2007-02-02 09:34:37 +01:00
|
|
|
DeviceRole serverRole;
|
2003-11-01 06:35:29 +01:00
|
|
|
|
add filtering to wordlist browser
Add a basic regular expression engine to the dictiter, and to the UI add
the ability to filter for "starts with", "contains" and "ends with",
which translate into ANDed RE_*, _*RE_* and _*RE, respectively (with
_ standing for blank/wildcard). The engine's tightly integrated with the
next/prevWord() functions for greatest possible speed, but unless
there's no pattern does slow things down a bit (especially when "ENDS
WITH" is used.) The full engine is not exposed (users can't provide raw
REs), and while the parser will accept nesting (e.g. ([AB]_*[CD]){2,5}
to mean words from 2-5 tiles long starting with A or B and ending with C
or D) the engine can't handle it. Which is why filtering for word length
is handled separately from REs (but also tightly integrated.)
Users can enter strings that don't map to tiles. They now get an
error. It made sense for the error alert to have a "Show tiles"
button, so there's now a dialog listing all the tiles in a wordlist,
something the browser has needed all along.
2020-08-05 18:25:33 +02:00
|
|
|
const XP_UCHAR* testMinMax;
|
|
|
|
const XP_UCHAR* dumpDelim;
|
|
|
|
|
|
|
|
GSList* iterTestPats;
|
|
|
|
/* These three aren't used yet */
|
|
|
|
const XP_UCHAR* patStartW;
|
|
|
|
const XP_UCHAR* patContains;
|
|
|
|
const XP_UCHAR* patEndsW;
|
|
|
|
#ifdef XWFEATURE_TESTPATSTR
|
|
|
|
const XP_UCHAR* iterTestPatStr;
|
|
|
|
#endif
|
|
|
|
|
2023-12-19 02:08:51 +01:00
|
|
|
const char* rematchOrder;
|
|
|
|
|
2023-08-14 17:10:29 +02:00
|
|
|
struct {
|
|
|
|
void (*quit)(void* params);
|
|
|
|
} cmdProcs;
|
|
|
|
|
2022-09-04 03:47:04 +02:00
|
|
|
XP_U16 conTypes;
|
2007-11-26 03:58:25 +01:00
|
|
|
struct {
|
2020-04-23 01:21:30 +02:00
|
|
|
XP_U16 inviteeCounts[MAX_NUM_PLAYERS];
|
2006-10-10 03:34:37 +02:00
|
|
|
#ifdef XWFEATURE_RELAY
|
2006-08-26 23:15:20 +02:00
|
|
|
struct {
|
|
|
|
char* relayName;
|
2009-09-14 05:11:11 +02:00
|
|
|
char* invite;
|
2006-08-26 23:15:20 +02:00
|
|
|
short defaultSendPort;
|
2010-09-15 06:13:45 +02:00
|
|
|
XP_Bool seeksPublicRoom;
|
|
|
|
XP_Bool advertiseRoom;
|
2020-02-14 06:43:46 +01:00
|
|
|
GSList* inviteeRelayIDs;
|
2006-08-26 23:15:20 +02:00
|
|
|
} relay;
|
2006-10-10 03:34:37 +02:00
|
|
|
#endif
|
|
|
|
#ifdef XWFEATURE_BLUETOOTH
|
2006-08-26 23:15:20 +02:00
|
|
|
struct {
|
|
|
|
bdaddr_t hostAddr; /* unused if a host */
|
2022-09-04 03:47:04 +02:00
|
|
|
const char* btaddr;
|
2006-08-26 23:15:20 +02:00
|
|
|
} bt;
|
2007-11-26 03:58:25 +01:00
|
|
|
#endif
|
2014-09-21 03:08:33 +02:00
|
|
|
#if defined XWFEATURE_IP_DIRECT || defined XWFEATURE_DIRECTIP
|
2007-11-26 03:58:25 +01:00
|
|
|
struct {
|
|
|
|
const char* hostName;
|
2014-10-15 16:26:18 +02:00
|
|
|
int hostPort;
|
|
|
|
int myPort;
|
2007-11-26 03:58:25 +01:00
|
|
|
} ip;
|
2008-12-29 02:35:29 +01:00
|
|
|
#endif
|
|
|
|
#ifdef XWFEATURE_SMS
|
|
|
|
struct {
|
2018-07-06 06:22:20 +02:00
|
|
|
const char* myPhone;
|
2020-02-17 07:34:33 +01:00
|
|
|
GSList* inviteePhones;
|
2008-12-29 02:35:29 +01:00
|
|
|
int port;
|
|
|
|
} sms;
|
2006-10-10 03:34:37 +02:00
|
|
|
#endif
|
2020-05-20 22:58:53 +02:00
|
|
|
struct {
|
|
|
|
MQTTDevID devID;
|
|
|
|
GSList* inviteeDevIDs;
|
|
|
|
const char* hostName;
|
|
|
|
int port;
|
|
|
|
} mqtt;
|
2006-08-26 23:15:20 +02:00
|
|
|
} connInfo;
|
|
|
|
|
2003-11-01 06:35:29 +01:00
|
|
|
union {
|
|
|
|
ServerInfo serverInfo;
|
|
|
|
ClientInfo clientInfo;
|
|
|
|
} info;
|
2013-01-07 15:10:44 +01:00
|
|
|
MPSLOT
|
2003-11-01 06:35:29 +01:00
|
|
|
} LaunchParams;
|
|
|
|
|
2006-09-10 21:01:06 +02:00
|
|
|
typedef struct CommonGlobals CommonGlobals;
|
|
|
|
|
2020-01-24 18:05:16 +01:00
|
|
|
typedef guint (*SocketAddedFunc)( void* closure, int newsock, GIOFunc func );
|
2006-09-10 21:01:06 +02:00
|
|
|
typedef XP_Bool (*Acceptor)( int sock, void* ctxt );
|
|
|
|
typedef void (*AddAcceptorFunc)(int listener, Acceptor func,
|
2007-11-28 04:59:26 +01:00
|
|
|
CommonGlobals* globals, void** storage );
|
2005-03-19 23:07:53 +01:00
|
|
|
|
2009-07-10 07:04:04 +02:00
|
|
|
typedef struct _TimerInfo {
|
|
|
|
XWTimerProc proc;
|
|
|
|
void* closure;
|
2011-09-20 03:28:19 +02:00
|
|
|
#ifdef USE_GLIBLOOP
|
|
|
|
struct CommonGlobals* globals;
|
|
|
|
#else
|
2009-07-10 07:04:04 +02:00
|
|
|
XP_U32 when; /* used only for ncurses */
|
2011-09-20 03:28:19 +02:00
|
|
|
#endif
|
2009-07-10 07:04:04 +02:00
|
|
|
} TimerInfo;
|
|
|
|
|
2013-01-09 15:30:52 +01:00
|
|
|
typedef void (*OnSaveFunc)( void* closure, sqlite3_int64 rowid,
|
|
|
|
XP_Bool firstTime );
|
2013-01-07 17:00:47 +01:00
|
|
|
|
2006-09-10 21:01:06 +02:00
|
|
|
struct CommonGlobals {
|
2020-01-24 18:05:16 +01:00
|
|
|
CurGameInfo _gi;
|
2003-11-01 06:35:29 +01:00
|
|
|
LaunchParams* params;
|
2022-09-28 17:47:39 +02:00
|
|
|
TransportProcs procs;
|
2011-01-25 07:20:47 +01:00
|
|
|
CommonPrefs cp;
|
2013-01-07 15:10:44 +01:00
|
|
|
XW_UtilCtxt* util;
|
2003-11-01 06:35:29 +01:00
|
|
|
|
|
|
|
XWGame game;
|
2020-01-24 18:05:16 +01:00
|
|
|
DrawCtx* draw;
|
2013-07-10 03:10:41 +02:00
|
|
|
CurGameInfo* gi;
|
2022-09-04 03:47:04 +02:00
|
|
|
CommsAddrRec selfAddr; /* set e.g. by new game dialog */
|
|
|
|
CommsAddrRec hostAddr; /* used by client only: addr of invite sender */
|
2003-11-30 20:09:39 +01:00
|
|
|
XP_U16 lastNTilesToUse;
|
2012-09-12 04:07:00 +02:00
|
|
|
XP_U16 lastStreamSize;
|
2013-12-19 15:59:34 +01:00
|
|
|
XP_U16 nMissing;
|
2012-10-07 21:47:06 +02:00
|
|
|
XP_Bool manualFinal; /* use asked for final scores */
|
2020-01-24 18:05:16 +01:00
|
|
|
sqlite3_int64 rowid;
|
2006-08-26 23:15:20 +02:00
|
|
|
|
2014-11-05 16:41:20 +01:00
|
|
|
void* socketAddedClosure;
|
2013-01-09 15:30:52 +01:00
|
|
|
OnSaveFunc onSave;
|
|
|
|
void* onSaveClosure;
|
2013-06-27 16:00:36 +02:00
|
|
|
GSList* packetQueue;
|
|
|
|
XP_U32 nextPacketID; /* for debugging */
|
2005-06-23 06:20:00 +02:00
|
|
|
|
2020-02-03 04:03:10 +01:00
|
|
|
/* timer stuff */
|
|
|
|
guint timerSources[NUM_TIMERS_PLUS_ONE - 1];
|
|
|
|
XP_U32 scoreTimerInterval;
|
|
|
|
struct timeval scoreTv; /* for timer */
|
2020-02-03 07:10:20 +01:00
|
|
|
guint idleID;
|
2020-02-03 04:03:10 +01:00
|
|
|
|
2009-09-20 20:45:25 +02:00
|
|
|
CommsRelayState state;
|
|
|
|
|
2006-09-10 21:01:06 +02:00
|
|
|
/* Allow listener sockets to be installed in either gtk or ncurses'
|
|
|
|
* polling mechanism.*/
|
|
|
|
AddAcceptorFunc addAcceptor;
|
|
|
|
Acceptor acceptor;
|
2011-11-18 04:56:36 +01:00
|
|
|
|
2011-11-22 02:57:38 +01:00
|
|
|
/* hash by relayID of lists of messages */
|
|
|
|
GHashTable* noConnMsgs;
|
2006-09-10 21:01:06 +02:00
|
|
|
|
2017-02-17 17:10:09 +01:00
|
|
|
/* Saved state from util method to response method */
|
|
|
|
XP_U16 selPlayer;
|
|
|
|
char question[256*4];
|
|
|
|
const XP_UCHAR* askPassName;
|
2017-02-19 04:16:32 +01:00
|
|
|
XP_U16 nTiles;
|
2017-03-10 05:36:14 +01:00
|
|
|
XP_U16 nToPick;
|
2017-02-19 04:16:32 +01:00
|
|
|
XP_U16 blankCol;
|
|
|
|
XP_U16 blankRow;
|
2017-03-10 05:36:14 +01:00
|
|
|
XP_Bool pickIsInitial;
|
2017-02-19 04:16:32 +01:00
|
|
|
|
|
|
|
const XP_UCHAR* tiles[MAX_UNIQUE_TILES];
|
2017-03-10 05:36:14 +01:00
|
|
|
XP_U16 tileCounts[MAX_UNIQUE_TILES];
|
2017-02-17 17:10:09 +01:00
|
|
|
|
2007-11-26 03:58:25 +01:00
|
|
|
#ifdef XWFEATURE_RELAY
|
2013-12-18 04:54:25 +01:00
|
|
|
int relaySocket; /* tcp connection to relay */
|
2007-11-26 03:58:25 +01:00
|
|
|
void* storage;
|
2006-09-19 05:39:08 +02:00
|
|
|
char* defaultServerName;
|
2007-11-26 03:58:25 +01:00
|
|
|
#endif
|
2006-09-19 05:39:08 +02:00
|
|
|
|
2007-11-26 03:58:25 +01:00
|
|
|
#if defined XWFEATURE_BLUETOOTH
|
2006-09-19 05:39:08 +02:00
|
|
|
struct LinBtStuff* btStuff;
|
2007-11-26 03:58:25 +01:00
|
|
|
#endif
|
|
|
|
#if defined XWFEATURE_IP_DIRECT
|
|
|
|
struct LinUDPStuff* udpStuff;
|
|
|
|
#endif
|
2006-08-26 23:15:20 +02:00
|
|
|
|
2009-07-10 07:04:04 +02:00
|
|
|
TimerInfo timerInfo[NUM_TIMERS_PLUS_ONE];
|
2020-01-24 18:05:16 +01:00
|
|
|
guint secondsTimerID;
|
2012-09-10 16:31:45 +02:00
|
|
|
|
|
|
|
XP_U16 curSaveToken;
|
2006-09-10 21:01:06 +02:00
|
|
|
};
|
2003-11-01 06:35:29 +01:00
|
|
|
|
2020-01-24 18:05:16 +01:00
|
|
|
typedef struct _CommonAppGlobals {
|
|
|
|
LaunchParams* params;
|
2023-11-18 04:39:45 +01:00
|
|
|
GSList* globalsList; /* used by gtk only */
|
2020-01-24 18:05:16 +01:00
|
|
|
} CommonAppGlobals;
|
|
|
|
|
2013-01-16 15:46:33 +01:00
|
|
|
typedef struct _SourceData {
|
|
|
|
GIOChannel* channel;
|
|
|
|
gint watch;
|
|
|
|
SockReceiver proc;
|
|
|
|
void* procClosure;
|
|
|
|
} SourceData;
|
|
|
|
|
2016-12-22 17:57:54 +01:00
|
|
|
#ifdef PLATFORM_GTK
|
2013-01-16 04:04:20 +01:00
|
|
|
typedef struct _GtkAppGlobals {
|
2020-01-24 18:05:16 +01:00
|
|
|
CommonAppGlobals cag;
|
2013-01-17 06:16:07 +01:00
|
|
|
GArray* selRows;
|
2013-01-16 15:46:33 +01:00
|
|
|
GList* sources;
|
2013-01-20 00:18:36 +01:00
|
|
|
GtkWidget* window;
|
2013-01-07 17:00:47 +01:00
|
|
|
GtkWidget* listWidget;
|
2013-01-17 06:16:07 +01:00
|
|
|
GtkWidget* openButton;
|
2015-07-07 05:28:16 +02:00
|
|
|
GtkWidget* rematchButton;
|
2013-01-17 06:16:07 +01:00
|
|
|
GtkWidget* deleteButton;
|
2016-08-06 03:31:17 +02:00
|
|
|
/* save window position */
|
|
|
|
GdkEventConfigure lastConfigure;
|
2013-01-16 04:04:20 +01:00
|
|
|
} GtkAppGlobals;
|
2016-12-22 17:57:54 +01:00
|
|
|
#endif
|
2013-01-06 04:40:29 +01:00
|
|
|
|
2020-04-25 23:19:23 +02:00
|
|
|
#define NULL_XWE ((XWEnv)NULL)
|
2020-04-25 20:34:58 +02:00
|
|
|
|
2003-11-01 06:35:29 +01:00
|
|
|
#endif
|