summaryrefslogtreecommitdiff
path: root/src/core/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/util.c')
-rw-r--r--src/core/util.c611
1 files changed, 0 insertions, 611 deletions
diff --git a/src/core/util.c b/src/core/util.c
deleted file mode 100644
index bcfcb7f4..00000000
--- a/src/core/util.c
+++ /dev/null
@@ -1,611 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-
-/* Metacity utilities */
-
-/*
- * Copyright (C) 2001 Havoc Pennington
- * Copyright (C) 2005 Elijah Newren
- *
- * 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.
- */
-
-#define _GNU_SOURCE
-#define _POSIX_C_SOURCE 200112L /* for fdopen() */
-
-#include <config.h>
-#include "util.h"
-#include "main.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <X11/Xlib.h> /* must explicitly be included for Solaris; #326746 */
-#include <X11/Xutil.h> /* Just for the definition of the various gravities */
-
-#ifdef HAVE_BACKTRACE
-#include <execinfo.h>
-void
-meta_print_backtrace (void)
-{
- void *bt[500];
- int bt_size;
- int i;
- char **syms;
-
- bt_size = backtrace (bt, 500);
-
- syms = backtrace_symbols (bt, bt_size);
-
- i = 0;
- while (i < bt_size)
- {
- meta_verbose (" %s\n", syms[i]);
- ++i;
- }
-
- free (syms);
-}
-#else
-void
-meta_print_backtrace (void)
-{
- meta_verbose ("Not compiled with backtrace support\n");
-}
-#endif
-
-static gboolean is_verbose = FALSE;
-static gboolean is_debugging = FALSE;
-static gboolean replace_current = FALSE;
-static int no_prefix = 0;
-
-#ifdef WITH_VERBOSE_MODE
-static FILE* logfile = NULL;
-
-static void
-ensure_logfile (void)
-{
- if (logfile == NULL && g_getenv ("METACITY_USE_LOGFILE"))
- {
- char *filename = NULL;
- char *tmpl;
- int fd;
- GError *err;
-
- tmpl = g_strdup_printf ("metacity-%d-debug-log-XXXXXX",
- (int) getpid ());
-
- err = NULL;
- fd = g_file_open_tmp (tmpl,
- &filename,
- &err);
-
- g_free (tmpl);
-
- if (err != NULL)
- {
- meta_warning (_("Failed to open debug log: %s\n"),
- err->message);
- g_error_free (err);
- return;
- }
-
- logfile = fdopen (fd, "w");
-
- if (logfile == NULL)
- {
- meta_warning (_("Failed to fdopen() log file %s: %s\n"),
- filename, strerror (errno));
- close (fd);
- }
- else
- {
- g_printerr (_("Opened log file %s\n"), filename);
- }
-
- g_free (filename);
- }
-}
-#endif
-
-gboolean
-meta_is_verbose (void)
-{
- return is_verbose;
-}
-
-void
-meta_set_verbose (gboolean setting)
-{
-#ifndef WITH_VERBOSE_MODE
- if (setting)
- meta_fatal (_("Metacity was compiled without support for verbose mode\n"));
-#else
- if (setting)
- ensure_logfile ();
-#endif
-
- is_verbose = setting;
-}
-
-gboolean
-meta_is_debugging (void)
-{
- return is_debugging;
-}
-
-void
-meta_set_debugging (gboolean setting)
-{
-#ifdef WITH_VERBOSE_MODE
- if (setting)
- ensure_logfile ();
-#endif
-
- is_debugging = setting;
-}
-
-gboolean
-meta_get_replace_current_wm (void)
-{
- return replace_current;
-}
-
-void
-meta_set_replace_current_wm (gboolean setting)
-{
- replace_current = setting;
-}
-
-char *
-meta_g_utf8_strndup (const gchar *src,
- gsize n)
-{
- const gchar *s = src;
- while (n && *s)
- {
- s = g_utf8_next_char (s);
- n--;
- }
-
- return g_strndup (src, s - src);
-}
-
-static int
-utf8_fputs (const char *str,
- FILE *f)
-{
- char *l;
- int retval;
-
- l = g_locale_from_utf8 (str, -1, NULL, NULL, NULL);
-
- if (l == NULL)
- retval = fputs (str, f); /* just print it anyway, better than nothing */
- else
- retval = fputs (l, f);
-
- g_free (l);
-
- return retval;
-}
-
-void
-meta_free_gslist_and_elements (GSList *list_to_deep_free)
-{
- g_slist_foreach (list_to_deep_free,
- (void (*)(gpointer,gpointer))&g_free, /* ew, for ugly */
- NULL);
- g_slist_free (list_to_deep_free);
-}
-
-#ifdef WITH_VERBOSE_MODE
-void
-meta_debug_spew_real (const char *format, ...)
-{
- va_list args;
- gchar *str;
- FILE *out;
-
- g_return_if_fail (format != NULL);
-
- if (!is_debugging)
- return;
-
- va_start (args, format);
- str = g_strdup_vprintf (format, args);
- va_end (args);
-
- out = logfile ? logfile : stderr;
-
- if (no_prefix == 0)
- utf8_fputs (_("Window manager: "), out);
- utf8_fputs (str, out);
-
- fflush (out);
-
- g_free (str);
-}
-#endif /* WITH_VERBOSE_MODE */
-
-#ifdef WITH_VERBOSE_MODE
-void
-meta_verbose_real (const char *format, ...)
-{
- va_list args;
- gchar *str;
- FILE *out;
-
- g_return_if_fail (format != NULL);
-
- if (!is_verbose)
- return;
-
- va_start (args, format);
- str = g_strdup_vprintf (format, args);
- va_end (args);
-
- out = logfile ? logfile : stderr;
-
- if (no_prefix == 0)
- utf8_fputs ("Window manager: ", out);
- utf8_fputs (str, out);
-
- fflush (out);
-
- g_free (str);
-}
-#endif /* WITH_VERBOSE_MODE */
-
-#ifdef WITH_VERBOSE_MODE
-static const char*
-topic_name (MetaDebugTopic topic)
-{
- switch (topic)
- {
- case META_DEBUG_FOCUS:
- return "FOCUS";
- case META_DEBUG_WORKAREA:
- return "WORKAREA";
- case META_DEBUG_STACK:
- return "STACK";
- case META_DEBUG_THEMES:
- return "THEMES";
- case META_DEBUG_SM:
- return "SM";
- case META_DEBUG_EVENTS:
- return "EVENTS";
- case META_DEBUG_WINDOW_STATE:
- return "WINDOW_STATE";
- case META_DEBUG_WINDOW_OPS:
- return "WINDOW_OPS";
- case META_DEBUG_PLACEMENT:
- return "PLACEMENT";
- case META_DEBUG_GEOMETRY:
- return "GEOMETRY";
- case META_DEBUG_PING:
- return "PING";
- case META_DEBUG_XINERAMA:
- return "XINERAMA";
- case META_DEBUG_KEYBINDINGS:
- return "KEYBINDINGS";
- case META_DEBUG_SYNC:
- return "SYNC";
- case META_DEBUG_ERRORS:
- return "ERRORS";
- case META_DEBUG_STARTUP:
- return "STARTUP";
- case META_DEBUG_PREFS:
- return "PREFS";
- case META_DEBUG_GROUPS:
- return "GROUPS";
- case META_DEBUG_RESIZING:
- return "RESIZING";
- case META_DEBUG_SHAPES:
- return "SHAPES";
- case META_DEBUG_COMPOSITOR:
- return "COMPOSITOR";
- case META_DEBUG_EDGE_RESISTANCE:
- return "EDGE_RESISTANCE";
- }
-
- return "WM";
-}
-
-static int sync_count = 0;
-
-void
-meta_topic_real (MetaDebugTopic topic,
- const char *format,
- ...)
-{
- va_list args;
- gchar *str;
- FILE *out;
-
- g_return_if_fail (format != NULL);
-
- if (!is_verbose)
- return;
-
- va_start (args, format);
- str = g_strdup_vprintf (format, args);
- va_end (args);
-
- out = logfile ? logfile : stderr;
-
- if (no_prefix == 0)
- fprintf (out, "%s: ", topic_name (topic));
-
- if (topic == META_DEBUG_SYNC)
- {
- ++sync_count;
- fprintf (out, "%d: ", sync_count);
- }
-
- utf8_fputs (str, out);
-
- fflush (out);
-
- g_free (str);
-}
-#endif /* WITH_VERBOSE_MODE */
-
-void
-meta_bug (const char *format, ...)
-{
- va_list args;
- gchar *str;
- FILE *out;
-
- g_return_if_fail (format != NULL);
-
- va_start (args, format);
- str = g_strdup_vprintf (format, args);
- va_end (args);
-
-#ifdef WITH_VERBOSE_MODE
- out = logfile ? logfile : stderr;
-#else
- out = stderr;
-#endif
-
- if (no_prefix == 0)
- utf8_fputs (_("Bug in window manager: "), out);
- utf8_fputs (str, out);
-
- fflush (out);
-
- g_free (str);
-
- meta_print_backtrace ();
-
- /* stop us in a debugger */
- abort ();
-}
-
-void
-meta_warning (const char *format, ...)
-{
- va_list args;
- gchar *str;
- FILE *out;
-
- g_return_if_fail (format != NULL);
-
- va_start (args, format);
- str = g_strdup_vprintf (format, args);
- va_end (args);
-
-#ifdef WITH_VERBOSE_MODE
- out = logfile ? logfile : stderr;
-#else
- out = stderr;
-#endif
-
- if (no_prefix == 0)
- utf8_fputs (_("Window manager warning: "), out);
- utf8_fputs (str, out);
-
- fflush (out);
-
- g_free (str);
-}
-
-void
-meta_fatal (const char *format, ...)
-{
- va_list args;
- gchar *str;
- FILE *out;
-
- g_return_if_fail (format != NULL);
-
- va_start (args, format);
- str = g_strdup_vprintf (format, args);
- va_end (args);
-
-#ifdef WITH_VERBOSE_MODE
- out = logfile ? logfile : stderr;
-#else
- out = stderr;
-#endif
-
- if (no_prefix == 0)
- utf8_fputs (_("Window manager error: "), out);
- utf8_fputs (str, out);
-
- fflush (out);
-
- g_free (str);
-
- meta_exit (META_EXIT_ERROR);
-}
-
-void
-meta_push_no_msg_prefix (void)
-{
- ++no_prefix;
-}
-
-void
-meta_pop_no_msg_prefix (void)
-{
- g_return_if_fail (no_prefix > 0);
-
- --no_prefix;
-}
-
-void
-meta_exit (MetaExitCode code)
-{
-
- exit (code);
-}
-
-gint
-meta_unsigned_long_equal (gconstpointer v1,
- gconstpointer v2)
-{
- return *((const gulong*) v1) == *((const gulong*) v2);
-}
-
-guint
-meta_unsigned_long_hash (gconstpointer v)
-{
- gulong val = * (const gulong *) v;
-
- /* I'm not sure this works so well. */
-#if GLIB_SIZEOF_LONG > 4
- return (guint) (val ^ (val >> 32));
-#else
- return val;
-#endif
-}
-
-const char*
-meta_gravity_to_string (int gravity)
-{
- switch (gravity)
- {
- case NorthWestGravity:
- return "NorthWestGravity";
- break;
- case NorthGravity:
- return "NorthGravity";
- break;
- case NorthEastGravity:
- return "NorthEastGravity";
- break;
- case WestGravity:
- return "WestGravity";
- break;
- case CenterGravity:
- return "CenterGravity";
- break;
- case EastGravity:
- return "EastGravity";
- break;
- case SouthWestGravity:
- return "SouthWestGravity";
- break;
- case SouthGravity:
- return "SouthGravity";
- break;
- case SouthEastGravity:
- return "SouthEastGravity";
- break;
- case StaticGravity:
- return "StaticGravity";
- break;
- default:
- return "NorthWestGravity";
- break;
- }
-}
-
-void
-meta_show_dialog (const char *type,
- const char *message,
- const char *timeout,
- const gint screen_number,
- const char **columns,
- const char **entries)
-{
- GError *error = NULL;
- char *screen_number_text = g_strdup_printf("%d", screen_number);
-
- /*
- We want:
-
-zenity --display X --screen S --title Metacity --error --text "There was an error running <tt>terminal</tt>:\n\nYour computer is on fire."
- ** with no pipes
-
-zenity --display X --screen S --title Metacity --question --text "<big><b><tt>%s</tt> is not responding.</b></big>\n\n<i>You may choose to wait a short while for it to continue or force the application to quit entirely.</i>"
-
-zenity --display X --screen S --title Metacity --list --timeout 240 --text "These windows do not support \"save current setup\" and will have to be restarted manually next time you log in." --column "Window" --column "Class" "Firefox" "foo" "Duke Nukem Forever" "bar"
- */
-
- const char **argvl;
- int i=0;
- GPid child_pid;
-
- argvl = g_malloc(sizeof (char*) *
- (9 + (timeout?2:0))
- );
-
- argvl[i++] = "zenity";
- argvl[i++] = type;
- argvl[i++] = "--screen";
- argvl[i++] = screen_number_text;
- argvl[i++] = "--title";
- /* Translators: This is the title used on dialog boxes */
- argvl[i++] = _("Metacity");
- argvl[i++] = "--text";
- argvl[i++] = message;
-
- if (timeout)
- {
- argvl[i++] = "--timeout";
- argvl[i++] = timeout;
- }
-
- argvl[i] = NULL;
-
- g_spawn_async_with_pipes (
- "/",
- (char**) argvl, /* ugh */
- NULL,
- G_SPAWN_SEARCH_PATH,
- NULL, NULL,
- &child_pid,
- NULL, NULL, NULL,
- &error
- );
-
- g_free (argvl);
- g_free (screen_number_text);
-
- if (error)
- {
- meta_warning ("%s\n", error->message);
- g_error_free (error);
- }
-}
-
-/* eof util.c */
-