From 4d286146806d92df2ebbb4541609bdd1f6d7fcc5 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Tue, 16 Feb 2010 22:08:03 -0500 Subject: [PATCH] Add skeleton for start of dot-desktop-file parser --- Makefile.am | 2 ++ obt/ddfile.c | 49 +++++++++++++++++++++++++ obt/ddfile.h | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 obt/ddfile.c create mode 100644 obt/ddfile.h diff --git a/Makefile.am b/Makefile.am index d5e60b6d..4c1f89d4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -130,6 +130,8 @@ obt_libobt_la_SOURCES = \ obt/mainloop.c \ obt/xml.h \ obt/xml.c \ + obt/ddfile.h \ + obt/ddfile.c \ obt/paths.h \ obt/paths.c \ obt/prop.h \ diff --git a/obt/ddfile.c b/obt/ddfile.c new file mode 100644 index 00000000..c9ec32dd --- /dev/null +++ b/obt/ddfile.c @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- + + obt/ddfile.c for the Openbox window manager + Copyright (c) 2009 Dana Jansens + + 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. + + See the COPYING file for a copy of the GNU General Public License. +*/ + +#include "obt/ddfile.h" +#include + +struct _ObtDDFile { + ObtDDFileType type; + gchar *name; /*!< Specific name for the object (eg Firefox) */ + gchar *generic; /*!< Generic name for the object (eg Web Browser) */ + gchar *comment; /*!< Comment/description to display for the object */ + gchar *icon; /*!< Name/path for an icon for the object */ + + union _ObtDDFileData { + struct { + gchar *exec; /*!< Executable to run for the app */ + gchar *wdir; /*!< Working dir to run the app in */ + gboolean term; /*!< Run the app in a terminal or not */ + ObtDDFileAppOpen open; + + /* XXX gchar**? or something better, a mime struct.. maybe + glib has something i can use. */ + gchar **mime; /*!< Mime types the app can open */ + + ObtDDFileAppStartup startup; + gchar *startup_wmclass; + } app; + struct { + gchar *url; + } link; + struct { + } dir; + } d; +}; diff --git a/obt/ddfile.h b/obt/ddfile.h new file mode 100644 index 00000000..2fc2f100 --- /dev/null +++ b/obt/ddfile.h @@ -0,0 +1,100 @@ +/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- + + obt/ddfile.h for the Openbox window manager + Copyright (c) 2009 Dana Jansens + + 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. + + See the COPYING file for a copy of the GNU General Public License. +*/ + +#ifndef __obt_ddfile_h +#define __obt_ddfile_h + +#include + +G_BEGIN_DECLS + +typedef enum { + OBT_DDFILE_TYPE_APPLICATION = 0, + OBT_DDFILE_TYPE_LINK = 1, + OBT_DDFILE_TYPE_DIRECTORY = 2 +} ObtDDFileType; + +typedef enum { + OBT_DDFILE_APP_STARTUP_NO_SUPPORT, + OBT_DDFILE_APP_STARTUP_PROTOCOL_SUPPORT, + OBT_DDFILE_APP_STARTUP_LEGACY_SUPPORT +} ObtDDFileAppStartup; + +typedef enum { + /*! The app can be launched with a single local file */ + OBT_DDFILE_APP_SINGLE_LOCAL = 1 << 0, + /*! The app can be launched with multiple local files */ + OBT_DDFILE_APP_MULTI_LOCAL = 1 << 1, + /*! The app can be launched with a single URL */ + OBT_DDFILE_APP_SINGLE_URL = 1 << 2, + /*! The app can be launched with multiple URLs */ + OBT_DDFILE_APP_MULTI_URL = 1 << 3 +} ObtDDFileAppOpen; + +typedef struct _ObtDDFile ObtDDFile; + +ObtDDFile* obt_ddfile_new_from_file(const gchar *name); + +void obt_ddfile_ref(ObtDDFile *e); +void obt_ddfile_unref(ObtDDFile *e); + +/*! Returns TRUE if the file exists but says it should be ignored, with + the Hidden flag. No other functions can be used for the ObtDDFile + in this case. */ +gboolean obt_ddfile_deleted (ObtDDFile *e); + +/*! Returns the type of object refered to by the .desktop file. */ +ObtDDFileType obt_ddfile_type (ObtDDFile *e); + +/*! Returns TRUE if the .desktop file should be displayed to users, given the + current environment. If FALSE, the .desktop file should not be showed. + This also uses the TryExec option if it is present. + @env A semicolon-deliminated list of environemnts. Can be one or more of: + GNOME, KDE, ROX, XFCE. Other environments not listed here may also + be supported. This can be null also if not listing any environment. */ +gboolean obt_ddfile_display(ObtDDFile *e, const gchar *env); + +const gchar* obt_ddfile_name (ObtDDFile *e); +const gchar* obt_ddfile_generic_name (ObtDDFile *e); +const gchar* obt_ddfile_comment (ObtDDFile *e); +/*! Returns the icon for the object referred to by the .desktop file. + Returns either an absolute path, or a string which can be used to find the + icon using the algorithm given by: + http://freedesktop.org/wiki/Specifications/icon-theme-spec?action=show&redirect=Standards/icon-theme-spec +*/ +const gchar* obt_ddfile_icon (ObtDDFile *e); + +const gchar *obt_ddfile_link_url(ObtDDFile *e); + +const gchar* obt_ddfile_app_executable (ObtDDFile *e); +/*! Returns the path in which the application should be run */ +const gchar* obt_ddfile_app_path (ObtDDFile *e); +gboolean obt_ddfile_app_run_in_terminal (ObtDDFile *e); +const gchar** obt_ddfile_app_mime_types (ObtDDFile *e); +/*! Returns a combination of values in the ObtDDFileAppOpen enum, + specifying if the application can be launched to open one or more files + and URLs. */ +ObtDDFileAppOpen obt_ddfile_app_open(ObtDDFile *e); + +ObtDDFileAppStartup obt_ddfile_app_startup_notify(ObtDDFile *e); +const gchar* obt_ddfile_app_startup_wmclass(ObtDDFile *e); + + +G_END_DECLS + +#endif