2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 //%% (c) Copyright 1993, 1994 Hewlett-Packard Company
24 //%% (c) Copyright 1993, 1994 International Business Machines Corp.
25 //%% (c) Copyright 1993, 1994 Sun Microsystems, Inc.
26 //%% (c) Copyright 1993, 1994 Novell, Inc.
27 //%% $XConsortium: ttdtprocid.C /main/3 1995/10/23 10:32:27 rswiston $
29 * @(#)ttdtprocid.C 1.3 93/09/07
31 * Copyright 1993 Sun Microsystems, Inc. All rights reserved.
35 #include <X11/Intrinsic.h>
36 #include "util/tt_Xlib.h"
37 #include "api/c/api_api.h"
38 #include "tttk/ttdtprocid.h"
39 #include "tttk/tttkmessage.h"
40 #include "tttk/tttkpattern.h"
41 #include "tttk/tttkutils.h"
42 #include "tttk/tttk2free.h"
43 #include "tttk/ttdesktop.h"
45 _TtDtProcid::_TtDtProcid(
51 // XXX Initialize procid's default contexts from environ(5).
52 _toolname = _tt_strdup( toolName );
53 _vendor = _tt_strdup( vendor );
54 _version = _tt_strdup( version );
57 _TtDtProcid::~_TtDtProcid()
65 // Create patterns for either session_join or message_accept
67 Tt_pattern *_TtDtProcid::
79 Tt_pattern *pats = (Tt_pattern *)malloc(numPats * sizeof(Tt_pattern));
81 return (Tt_pattern *)tt_error_pointer( TT_ERR_NOMEM );
84 char *sess = tt_default_session();
86 pats[++i] = ttdt_Get_Geometry_pat( TT_HANDLE, contract,
87 _ttdt_do_GSet_Geometry, shell, 1 );
88 pats[++i] = ttdt_Set_Geometry_pat( TT_HANDLE, contract,
89 _ttdt_do_GSet_Geometry, shell, 1 );
90 pats[++i] = ttdt_Get_Iconified_pat( TT_HANDLE, contract,
91 _ttdt_do_wm_state, shell, 0 );
92 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_GET_MAPPED ) );
93 tt_pattern_session_add( pats[i], sess );
94 tt_pattern_register( pats[i] );
95 pats[++i] = ttdt_Set_Iconified_pat( TT_HANDLE, contract,
96 _ttdt_do_wm_state, shell, 0 );
97 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_SET_MAPPED ) );
98 tt_pattern_session_add( pats[i], sess );
99 tt_pattern_register( pats[i] );
100 pats[++i] = ttdt_Get_XInfo_pat( TT_HANDLE, contract,
101 _ttdt_do_Get_XInfo, shell, 1 );
102 pats[++i] = ttdt_Set_XInfo_pat( TT_HANDLE, contract,
103 _ttdt_do_Set_XInfo, shell, 1 );
104 pats[++i] = _ttdt_pat(TTDT_RAISE, _ttdt_contract_cb, TT_HANDLE,
105 contract, _ttdt_do_RaiseLower, shell, 0 );
106 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_LOWER ) );
107 tt_pattern_session_add( pats[i], sess );
108 tt_pattern_register( pats[i] );
110 pats[++i] = ttdt_Get_Geometry_pat( TT_HANDLE, contract,
111 (Ttdt_Geometry_out_cb)cb, clientData, 1 );
112 pats[++i] = ttdt_Set_Geometry_pat( TT_HANDLE, contract,
113 (Ttdt_Geometry_out_cb)cb, clientData, 1 );
114 pats[++i] = ttdt_Get_Iconified_pat( TT_HANDLE, contract,
115 (Ttdt_Iconified_out_cb)cb, clientData, 0 );
116 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_GET_MAPPED ) );
117 tt_pattern_session_add( pats[i], sess );
118 tt_pattern_register( pats[i] );
119 pats[++i] = ttdt_Set_Iconified_pat( TT_HANDLE, contract,
120 (Ttdt_Iconified_out_cb)cb, clientData, 0 );
121 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_SET_MAPPED ) );
122 tt_pattern_session_add( pats[i], sess );
123 tt_pattern_register( pats[i] );
124 pats[++i] = ttdt_Get_XInfo_pat( TT_HANDLE, contract,
125 (Ttdt_XInfo_out_cb)cb, clientData, 1 );
126 pats[++i] = ttdt_Set_XInfo_pat( TT_HANDLE, contract,
127 (Ttdt_XInfo_in_cb)cb, clientData, 1 );
128 pats[++i] = _ttdt_pat(TTDT_RAISE, _ttdt_contract_cb, TT_HANDLE,
129 contract, cb, clientData, 0 );
130 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_LOWER ) );
131 tt_pattern_session_add( pats[i], sess );
132 tt_pattern_register( pats[i] );
134 void *_clientData = clientData;
136 // No callback, so set up our own client data
138 // tttk will send WM_DELETE_WINDOW to shell...
141 // ...but that quits entire app, so do not do it
142 // for ttdt_message_accept(). Seeing no shell,
143 // _ttdt_contract_cb() will fail the Quit.
147 pats[++i] = _ttdt_pat( TTDT_QUIT, _ttdt_contract_cb, TT_HANDLE,
148 contract, cb, _clientData, 1 );
149 pats[++i] = _ttdt_pat( TTDT_PAUSE, _ttdt_contract_cb, TT_HANDLE,
150 contract, cb, (cb ? clientData : shell), 0 );
151 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_RESUME ));
152 tt_pattern_session_add( pats[i], sess );
153 tt_pattern_register( pats[i] );
154 pats[++i] = _ttdt_pat( TTDT_GET_STATUS, _ttdt_contract_cb, TT_HANDLE,
155 contract, cb, clientData, 1 );
157 pats[++i]= _ttdt_pat( TTDT_DO_COMMAND, _ttdt_contract_cb,
158 TT_HANDLE, contract, cb, clientData, 1 );
159 pats[++i]= _ttdt_pat( TTDT_SET_LOCALE, _ttdt_posix_cb,
160 TT_HANDLE, contract, 0, 0, 0 );
161 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_GET_LOCALE ));
162 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_SET_ENVIRONMENT ));
163 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_GET_ENVIRONMENT ));
164 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_SET_SITUATION ));
165 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_GET_SITUATION ));
166 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_SIGNAL ));
167 tt_pattern_op_add( pats[i], _ttDtOp( TTDT_GET_SYSINFO ));
168 tt_pattern_session_add( pats[i], sess );
169 tt_pattern_register( pats[i] );
172 Tt_pattern *pat = pats;
174 Tt_status status = tt_ptr_error( *pat );
175 if (status != TT_OK) {
176 _tttk_patterns_destroy( pats );
177 return (Tt_pattern *)tt_error_pointer( status );