"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "libsn/sn-launchee.c" between
xfe-1.42.tar.gz and xfe-1.43.tar.gz

About: Xfe (X File Explorer) is a file manager and browser (using the FOX toolkit).

sn-launchee.c  (xfe-1.42):sn-launchee.c  (xfe-1.43)
skipping to change at line 31 skipping to change at line 31
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE. * SOFTWARE.
*/ */
#include "sn-launchee.h" #include "sn-launchee.h"
#include "sn-internals.h" #include "sn-internals.h"
#include "sn-xmessages.h" #include "sn-xmessages.h"
#include <errno.h> #include <errno.h>
struct SnLauncheeContext struct SnLauncheeContext
{ {
int refcount; int refcount;
SnDisplay *display; SnDisplay *display;
int screen; int screen;
char *startup_id; char *startup_id;
}; };
/** /**
* sn_launchee_context_new: * sn_launchee_context_new:
* @display: an #SnDisplay * @display: an #SnDisplay
* @screen: an X screen number * @screen: an X screen number
* @startup_id: launch ID as in DESKTOP_STARTUP_ID env variable * @startup_id: launch ID as in DESKTOP_STARTUP_ID env variable
* *
* Creates a new launchee-side context for the startup notification * Creates a new launchee-side context for the startup notification
* protocol. * protocol.
* *
* Return value: a new launchee context * Return value: a new launchee context
**/ **/
SnLauncheeContext* SnLauncheeContext*
sn_launchee_context_new (SnDisplay *display, sn_launchee_context_new (SnDisplay *display,
int screen, int screen,
const char *startup_id) const char *startup_id)
{ {
SnLauncheeContext *context; SnLauncheeContext *context;
context = sn_new0 (SnLauncheeContext, 1); context = sn_new0 (SnLauncheeContext, 1);
context->refcount = 1; context->refcount = 1;
context->display = display; context->display = display;
sn_display_ref (context->display); sn_display_ref (context->display);
context->screen = screen; context->screen = screen;
context->startup_id = sn_internal_strdup (startup_id); context->startup_id = sn_internal_strdup (startup_id);
return context; return context;
} }
/** /**
* sn_launchee_context_new_from_environment: * sn_launchee_context_new_from_environment:
* @display: an #SnDisplay * @display: an #SnDisplay
* @screen: an X screen number * @screen: an X screen number
* *
* Tries to create an #SnLauncheeContext given information in the * Tries to create an #SnLauncheeContext given information in the
* program's environment (DESKTOP_STARTUP_ID environment * program's environment (DESKTOP_STARTUP_ID environment
* variable). Returns %NULL if the env variables are not available or * variable). Returns %NULL if the env variables are not available or
* can't be parsed. * can't be parsed.
* *
* Return value: a new #SnLauncheeContext or %NULL * Return value: a new #SnLauncheeContext or %NULL
**/ **/
SnLauncheeContext* SnLauncheeContext*
sn_launchee_context_new_from_environment (SnDisplay *display, sn_launchee_context_new_from_environment (SnDisplay *display,
int screen) int screen)
{ {
const char *id_str; const char *id_str;
id_str = getenv ("DESKTOP_STARTUP_ID"); id_str = getenv ("DESKTOP_STARTUP_ID");
if (id_str == NULL) if (id_str == NULL)
return NULL; return NULL;
return sn_launchee_context_new (display, screen, id_str); return sn_launchee_context_new (display, screen, id_str);
} }
void void
sn_launchee_context_ref (SnLauncheeContext *context) sn_launchee_context_ref (SnLauncheeContext *context)
{ {
context->refcount += 1; context->refcount += 1;
} }
void void
sn_launchee_context_unref (SnLauncheeContext *context) sn_launchee_context_unref (SnLauncheeContext *context)
{ {
context->refcount -= 1; context->refcount -= 1;
if (context->refcount == 0) if (context->refcount == 0)
{ {
sn_display_unref (context->display); sn_display_unref (context->display);
sn_free (context->startup_id); sn_free (context->startup_id);
sn_free (context); sn_free (context);
} }
} }
/** /**
* sn_launchee_context_get_startup_id: * sn_launchee_context_get_startup_id:
* @context: an #SnLauncheeContext * @context: an #SnLauncheeContext
* *
* Get the startup ID for the context. * Get the startup ID for the context.
* *
* Return value: the startup ID for the context. * Return value: the startup ID for the context.
**/ **/
const char* const char*
sn_launchee_context_get_startup_id (SnLauncheeContext *context) sn_launchee_context_get_startup_id (SnLauncheeContext *context)
{ {
return context->startup_id; return context->startup_id;
} }
/** /**
* sn_launchee_context_get_id_has_timestamp: * sn_launchee_context_get_id_has_timestamp:
* @context: an #SnLauncheeContext * @context: an #SnLauncheeContext
* *
* Return whether the startup ID for the context contains a timestamp * Return whether the startup ID for the context contains a timestamp
* *
* Return value: whether the startup ID has an embedded timestamp * Return value: whether the startup ID has an embedded timestamp
**/ **/
int int
sn_launchee_context_get_id_has_timestamp (SnLauncheeContext *context) sn_launchee_context_get_id_has_timestamp (SnLauncheeContext *context)
{ {
char * time_str; char * time_str;
time_str = sn_internal_find_last_occurrence(context->startup_id, "_TIME"); time_str = sn_internal_find_last_occurrence(context->startup_id, "_TIME");
return time_str != NULL; return time_str != NULL;
} }
/** /**
* sn_launchee_context_get_timestamp: * sn_launchee_context_get_timestamp:
* @context: an #SnLauncheeContext * @context: an #SnLauncheeContext
* *
* Return the timestamp embedded in the startup ID * Return the timestamp embedded in the startup ID
* *
* Return value: timestamp embedded in the startup ID * Return value: timestamp embedded in the startup ID
**/ **/
Time Time
sn_launchee_context_get_timestamp (SnLauncheeContext *context) sn_launchee_context_get_timestamp (SnLauncheeContext *context)
{ {
char * time_str; char * time_str;
time_str = sn_internal_find_last_occurrence(context->startup_id, "_TIME"); time_str = sn_internal_find_last_occurrence(context->startup_id, "_TIME");
if (time_str != NULL) if (time_str != NULL)
{ {
/* Skip past the "_TIME" part */ /* Skip past the "_TIME" part */
time_str += 5; time_str += 5;
return sn_internal_string_to_ulong (time_str); return sn_internal_string_to_ulong (time_str);
} }
fprintf (stderr, fprintf (stderr,
"libsn: No timestamp contained in the startup ID!\n"); "libsn: No timestamp contained in the startup ID!\n");
/* Unfortunately, all values are valid; let's just return -1 */ /* Unfortunately, all values are valid; let's just return -1 */
return -1; return -1;
} }
/** /**
* sn_launchee_context_complete: * sn_launchee_context_complete:
* @context: an #SnLauncheeContext * @context: an #SnLauncheeContext
* *
* Called by the launchee when it is fully started up and the startup * Called by the launchee when it is fully started up and the startup
* sequence should end. * sequence should end.
* *
**/ **/
void void
sn_launchee_context_complete (SnLauncheeContext *context) sn_launchee_context_complete (SnLauncheeContext *context)
{ {
char *keys[2]; char *keys[2];
char *vals[2]; char *vals[2];
char *message; char *message;
keys[0] = "ID"; keys[0] = "ID";
keys[1] = NULL; keys[1] = NULL;
vals[0] = context->startup_id; vals[0] = context->startup_id;
vals[1] = NULL; vals[1] = NULL;
message = sn_internal_serialize_message ("remove", message = sn_internal_serialize_message ("remove",
(const char**) keys, (const char**) keys,
(const char**) vals); (const char**) vals);
sn_internal_broadcast_xmessage (context->display, sn_internal_broadcast_xmessage (context->display,
context->screen, context->screen,
"_NET_STARTUP_INFO", sn_internal_get_net_startup_info_atom(context-
"_NET_STARTUP_INFO_BEGIN", >display),
message); sn_internal_get_net_startup_info_begin_atom(co
ntext->display),
message);
sn_free (message); sn_free (message);
} }
/** /**
* sn_launchee_context_setup_window: * sn_launchee_context_setup_window:
* @context: a #SnLauncheeContext * @context: a #SnLauncheeContext
* @xwindow: window to be set up * @xwindow: window to be set up
* *
* Sets up @xwindow, marking it as launched by the startup sequence * Sets up @xwindow, marking it as launched by the startup sequence
* represented by @context. For example sets the _NET_STARTUP_ID * represented by @context. For example sets the _NET_STARTUP_ID
* property. Only the group leader windows of an application MUST be * property. Only the group leader windows of an application MUST be
* set up with this function, though if any other windows come from a * set up with this function, though if any other windows come from a
* separate startup sequence, they can be set up separately. * separate startup sequence, they can be set up separately.
* *
**/ **/
void void
sn_launchee_context_setup_window (SnLauncheeContext *context, sn_launchee_context_setup_window (SnLauncheeContext *context,
Window xwindow) Window xwindow)
{ {
sn_internal_set_utf8_string (context->display, sn_internal_set_utf8_string (context->display,
xwindow, (xcb_window_t)xwindow,
"_NET_STARTUP_ID", sn_internal_get_net_startup_id_atom(context->disp
context->startup_id); lay),
context->startup_id);
} }
 End of changes. 28 change blocks. 
61 lines changed or deleted 64 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)