Blame gdk/quartz/gdkproperty-quartz.c

Packit 98cdb6
/* gdkproperty-quartz.c
Packit 98cdb6
 *
Packit 98cdb6
 * Copyright (C) 2005 Imendio AB
Packit 98cdb6
 *
Packit 98cdb6
 * This library is free software; you can redistribute it and/or
Packit 98cdb6
 * modify it under the terms of the GNU Lesser General Public
Packit 98cdb6
 * License as published by the Free Software Foundation; either
Packit 98cdb6
 * version 2 of the License, or (at your option) any later version.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is distributed in the hope that it will be useful,
Packit 98cdb6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 98cdb6
 * Lesser General Public License for more details.
Packit 98cdb6
 *
Packit 98cdb6
 * You should have received a copy of the GNU Lesser General Public
Packit 98cdb6
 * License along with this library; if not, write to the
Packit 98cdb6
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 98cdb6
 * Boston, MA 02111-1307, USA.
Packit 98cdb6
 */
Packit 98cdb6
Packit 98cdb6
#include "config.h"
Packit 98cdb6
Packit 98cdb6
#include "gdkproperty.h"
Packit 98cdb6
Packit 98cdb6
static GHashTable *names_to_atoms;
Packit 98cdb6
static GPtrArray *atoms_to_names;
Packit 98cdb6
Packit 98cdb6
static const gchar xatoms_string[] = 
Packit 98cdb6
  /* These are all the standard predefined X atoms */
Packit 98cdb6
  "NONE\0"
Packit 98cdb6
  "PRIMARY\0"
Packit 98cdb6
  "SECONDARY\0"
Packit 98cdb6
  "ARC\0"
Packit 98cdb6
  "ATOM\0"
Packit 98cdb6
  "BITMAP\0"
Packit 98cdb6
  "CARDINAL\0"
Packit 98cdb6
  "COLORMAP\0"
Packit 98cdb6
  "CURSOR\0"
Packit 98cdb6
  "CUT_BUFFER0\0"
Packit 98cdb6
  "CUT_BUFFER1\0"
Packit 98cdb6
  "CUT_BUFFER2\0"
Packit 98cdb6
  "CUT_BUFFER3\0"
Packit 98cdb6
  "CUT_BUFFER4\0"
Packit 98cdb6
  "CUT_BUFFER5\0"
Packit 98cdb6
  "CUT_BUFFER6\0"
Packit 98cdb6
  "CUT_BUFFER7\0"
Packit 98cdb6
  "DRAWABLE\0"
Packit 98cdb6
  "FONT\0"
Packit 98cdb6
  "INTEGER\0"
Packit 98cdb6
  "PIXMAP\0"
Packit 98cdb6
  "POINT\0"
Packit 98cdb6
  "RECTANGLE\0"
Packit 98cdb6
  "RESOURCE_MANAGER\0"
Packit 98cdb6
  "RGB_COLOR_MAP\0"
Packit 98cdb6
  "RGB_BEST_MAP\0"
Packit 98cdb6
  "RGB_BLUE_MAP\0"
Packit 98cdb6
  "RGB_DEFAULT_MAP\0"
Packit 98cdb6
  "RGB_GRAY_MAP\0"
Packit 98cdb6
  "RGB_GREEN_MAP\0"
Packit 98cdb6
  "RGB_RED_MAP\0"
Packit 98cdb6
  "STRING\0"
Packit 98cdb6
  "VISUALID\0"
Packit 98cdb6
  "WINDOW\0"
Packit 98cdb6
  "WM_COMMAND\0"
Packit 98cdb6
  "WM_HINTS\0"
Packit 98cdb6
  "WM_CLIENT_MACHINE\0"
Packit 98cdb6
  "WM_ICON_NAME\0"
Packit 98cdb6
  "WM_ICON_SIZE\0"
Packit 98cdb6
  "WM_NAME\0"
Packit 98cdb6
  "WM_NORMAL_HINTS\0"
Packit 98cdb6
  "WM_SIZE_HINTS\0"
Packit 98cdb6
  "WM_ZOOM_HINTS\0"
Packit 98cdb6
  "MIN_SPACE\0"
Packit 98cdb6
  "NORM_SPACE\0"
Packit 98cdb6
  "MAX_SPACE\0"
Packit 98cdb6
  "END_SPACE\0"
Packit 98cdb6
  "SUPERSCRIPT_X\0"
Packit 98cdb6
  "SUPERSCRIPT_Y\0"
Packit 98cdb6
  "SUBSCRIPT_X\0"
Packit 98cdb6
  "SUBSCRIPT_Y\0"
Packit 98cdb6
  "UNDERLINE_POSITION\0"
Packit 98cdb6
  "UNDERLINE_THICKNESS\0"
Packit 98cdb6
  "STRIKEOUT_ASCENT\0"
Packit 98cdb6
  "STRIKEOUT_DESCENT\0"
Packit 98cdb6
  "ITALIC_ANGLE\0"
Packit 98cdb6
  "X_HEIGHT\0"
Packit 98cdb6
  "QUAD_WIDTH\0"
Packit 98cdb6
  "WEIGHT\0"
Packit 98cdb6
  "POINT_SIZE\0"
Packit 98cdb6
  "RESOLUTION\0"
Packit 98cdb6
  "COPYRIGHT\0"
Packit 98cdb6
  "NOTICE\0"
Packit 98cdb6
  "FONT_NAME\0"
Packit 98cdb6
  "FAMILY_NAME\0"
Packit 98cdb6
  "FULL_NAME\0"
Packit 98cdb6
  "CAP_HEIGHT\0"
Packit 98cdb6
  "WM_CLASS\0"
Packit 98cdb6
  "WM_TRANSIENT_FOR\0"
Packit 98cdb6
 /* Below here, these are our additions. Increment N_CUSTOM_PREDEFINED
Packit 98cdb6
   * if you add any.
Packit 98cdb6
   */
Packit 98cdb6
  "CLIPBOARD\0"			/* = 69 */;
Packit 98cdb6
Packit 98cdb6
static const gint xatoms_offset[] = {
Packit 98cdb6
    0,   5,  13,  23,  27,  32,  39,  48,  57,  64,  76,  88, 
Packit 98cdb6
  100, 112, 124, 136, 148, 160, 169, 174, 182, 189, 195, 205, 
Packit 98cdb6
  222, 236, 249, 262, 278, 291, 305, 317, 324, 333, 340, 351, 
Packit 98cdb6
  360, 378, 391, 404, 412, 428, 442, 456, 466, 477, 487, 497, 
Packit 98cdb6
  511, 525, 537, 549, 568, 588, 605, 623, 636, 645, 656, 663, 
Packit 98cdb6
  674, 685, 695, 702, 712, 724, 734, 745, 754, 771
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
#define N_CUSTOM_PREDEFINED 1
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
ensure_atom_tables (void)
Packit 98cdb6
{
Packit 98cdb6
  int i;
Packit 98cdb6
  
Packit 98cdb6
  if (names_to_atoms)
Packit 98cdb6
    return;
Packit 98cdb6
Packit 98cdb6
  names_to_atoms = g_hash_table_new (g_str_hash, g_str_equal);
Packit 98cdb6
  atoms_to_names = g_ptr_array_sized_new (G_N_ELEMENTS (xatoms_offset));
Packit 98cdb6
Packit 98cdb6
  for (i = 0; i < G_N_ELEMENTS (xatoms_offset); i++)
Packit 98cdb6
    {
Packit 98cdb6
      g_hash_table_insert(names_to_atoms, (gchar *)xatoms_string + xatoms_offset[i], GINT_TO_POINTER (i));
Packit 98cdb6
      g_ptr_array_add(atoms_to_names, (gchar *)xatoms_string + xatoms_offset[i]);
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GdkAtom
Packit 98cdb6
intern_atom_internal (const gchar *atom_name, gboolean allocate)
Packit 98cdb6
{
Packit 98cdb6
  gpointer result;
Packit 98cdb6
  gchar *name;
Packit 98cdb6
  g_return_val_if_fail (atom_name != NULL, GDK_NONE);
Packit 98cdb6
Packit 98cdb6
  ensure_atom_tables ();
Packit 98cdb6
  
Packit 98cdb6
  if (g_hash_table_lookup_extended (names_to_atoms, atom_name, NULL, &result))
Packit 98cdb6
    return result;
Packit 98cdb6
  
Packit 98cdb6
  result = GINT_TO_POINTER (atoms_to_names->len);
Packit 98cdb6
  name = allocate ? g_strdup (atom_name) : (gchar *)atom_name;
Packit 98cdb6
  g_hash_table_insert(names_to_atoms, name, result);
Packit 98cdb6
  g_ptr_array_add(atoms_to_names, name);
Packit 98cdb6
  
Packit 98cdb6
  return result;  
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
GdkAtom
Packit 98cdb6
gdk_atom_intern (const gchar *atom_name,
Packit 98cdb6
		 gboolean     only_if_exists)
Packit 98cdb6
{
Packit 98cdb6
  return intern_atom_internal (atom_name, TRUE);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
GdkAtom
Packit 98cdb6
gdk_atom_intern_static_string (const gchar *atom_name)
Packit 98cdb6
{
Packit 98cdb6
  return intern_atom_internal (atom_name, FALSE);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
gdk_atom_name (GdkAtom atom)
Packit 98cdb6
{
Packit 98cdb6
  ensure_atom_tables ();
Packit 98cdb6
    
Packit 98cdb6
  if (GPOINTER_TO_INT (atom) >= atoms_to_names->len)
Packit 98cdb6
    return NULL;
Packit 98cdb6
    
Packit 98cdb6
  return g_strdup (g_ptr_array_index (atoms_to_names, GPOINTER_TO_INT (atom)));
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gdk_property_delete (GdkWindow *window,
Packit 98cdb6
		     GdkAtom    property)
Packit 98cdb6
{
Packit 98cdb6
  /* FIXME: Implement */
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gint
Packit 98cdb6
gdk_property_get (GdkWindow   *window,
Packit 98cdb6
		  GdkAtom      property,
Packit 98cdb6
		  GdkAtom      type,
Packit 98cdb6
		  gulong       offset,
Packit 98cdb6
		  gulong       length,
Packit 98cdb6
		  gint         pdelete,
Packit 98cdb6
		  GdkAtom     *actual_property_type,
Packit 98cdb6
		  gint        *actual_format_type,
Packit 98cdb6
		  gint        *actual_length,
Packit 98cdb6
		  guchar     **data)
Packit 98cdb6
{
Packit 98cdb6
  /* FIXME: Implement */
Packit 98cdb6
  return 0;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gdk_property_change (GdkWindow   *window,
Packit 98cdb6
		     GdkAtom      property,
Packit 98cdb6
		     GdkAtom      type,
Packit 98cdb6
		     gint         format,
Packit 98cdb6
		     GdkPropMode  mode,
Packit 98cdb6
		     const guchar *data,
Packit 98cdb6
		     gint         nelements)
Packit 98cdb6
{
Packit 98cdb6
  /* FIXME: Implement */
Packit 98cdb6
}